对于我的第一个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:'对象引用未设置为对象的实例。'
我不明白为什么我会犯这个错误。
谢谢!
答案 0 :(得分:0)
第一个问题:
您需要使用工作表对象中的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;
答案 1 :(得分:0)
另一个问题......我选择了一个名为“UniqueID”的特定列:
Microsoft.Office.Interop.Excel.Range testColumn = xlSheet.UsedRange.Columns.Name("Test");
我想在所有这一列中添加一个特定值到最后一行。
我该如何处理?
答案 2 :(得分:0)
基于Rafatic的答案(第二个问题-访问文档),我发现我可以使用以下代码访问工作表。我之所以这样说是因为Globals.ThisAddIn.Application.ActiveDocument
似乎不存在。
//using System.Windows.Forms;
//using Excel = Microsoft.Office.Interop.Excel;
Excel.Worksheet xlWb = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
MessageBox.Show(xlWb.Name);
xlWb.Range["A1"].Value = "Hello World!";