C#加载项Excel:ActiveSheet

对于我的第一个AddIn Excel,我想select工作表活动和计数表中的列和行。

我在自定义function区中创build了一个button。

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属性。 这个select只会给你关于所选单元当前部分的信息。

 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; 

第二个问题:

由于你正在编写一个插件,所以你不需要创build一个新的excelApp。 以下代码将使您可以访问您的文档

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

另一个问题…我select名称为“UniqueID”的特定列:

 Microsoft.Office.Interop.Excel.Range testColumn = xlSheet.UsedRange.Columns.Name("Test"); 

我想在所有这一列中添加一个特定的值到最后一行使用。

我如何继续?