C# 加载项 Excel:ActiveSheet
C# Add-In Excel : ActiveSheet
对于我的第一个 AddIn Excel,我希望 select sheet 处于活动状态并计算 sheet 中的列和行。
我在自定义功能区中创建了一个按钮。
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!";
}
我的第一个问题:return我有 1 列和 1 行。但是在我的 sheet 中,我有 23 列和 17 行。
为什么 return 我的 sheet 中的列数和行数不正确?
第二个问题:ActiveSheet 出现异常:
Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlWb.ActiveSheet;
错误:System.NullReferenceException:'Object reference not set to an instance of an object.'
我不明白为什么会出现这个错误。
谢谢!
第一个问题:
您需要使用工作表对象中的 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;
根据 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!";
对于我的第一个 AddIn Excel,我希望 select sheet 处于活动状态并计算 sheet 中的列和行。
我在自定义功能区中创建了一个按钮。
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!";
}
我的第一个问题:return我有 1 列和 1 行。但是在我的 sheet 中,我有 23 列和 17 行。 为什么 return 我的 sheet 中的列数和行数不正确?
第二个问题:ActiveSheet 出现异常:
Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlWb.ActiveSheet;
错误:System.NullReferenceException:'Object reference not set to an instance of an object.'
我不明白为什么会出现这个错误。
谢谢!
第一个问题:
您需要使用工作表对象中的 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;
根据 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!";