对于我的第一个AddIn Excel,我想选择工作表,并计算工作表中的列和行。

我在自定义功能区中创建了一个按钮。

    private void AddValues_Click(object sender, RibbonControlEventArgs e)
        {
            int lastRow;
            int lastColonne;

            lastRow = Globals.VATTools.Application.Selection.Rows.Count;
            lastColonne = Globals.VATTools.Application.Selection.Columns.Count;

            System.Windows.Forms.MessageBox.Show("Row : " + lastRow + " " + "Columns : " + lastColonne);

            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlApp.Visible = true;
            Microsoft.Office.Interop.Excel.Workbook xlWb = xlApp.ActiveWorkbook as Microsoft.Office.Interop.Excel.Workbook;
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlWb.ActiveSheet;
            Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range("A19");
            range.Value = "hello world!";
        }


我的第一个问题:它返回1列和1行。但是在我的工作表中,我有23列17行。
为什么这不能返回正确的工作表中的行数?

第二个问题:我在ActiveSheet上有一个例外:

Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlWb.ActiveSheet;


错误:System.NullReferenceException:'对象引用未设置为对象的实例。

我不明白为什么会有这个错误。

谢谢 !

最佳答案

第一个问题:

您需要使用工作表对象中的UsedRange属性。
该选择将仅为您提供有关所选单元格当前部分的信息。

Microsoft.Office.Interop.Excel.Range usedRange = xlSheet.UsedRange;
//To get the number of rows/columns
int totalRows = usedRange.Rows.Count;
int totalColumns = usedRange.Columns.Count;


第二个问题:

由于您正在编写插件,因此无需创建新的excelApp。
以下代码将使您可以访问文档

Microsoft.Office.Interop.Excel.Workbook xlWb = Globals.ThisAddin.Application.ActiveDocument.Workbook;

关于c# - C#加载项Excel:ActiveSheet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43395375/

10-17 00:12