从Excel API获取单元格值C#

我有一个function区,我为Excel做了一个cs文件作为加载项的核心执行。 在CustomRibbon上单击button时,我想parsing其中一行的数据值。

private void button1_Click(object sender, RibbonControlEventArgs e) { Console.WriteLine(Globals.ThisAddIn.Application.Cells[0, 0]); } 

但是这给了我一个错误

来自HRESULT的exception:0x800A03EC

我想要做的就是能够parsing来自工作表单元格的数据并将数据写入工作表。 即使在我的程序启动时,

  sheet.Cells[0,0]= "hello"; 

它也给我一个错误。

在Excel工作表中引用单元格的“最低”适用索引是[1,1],它对应于列A,单元格1.我看到您正在尝试引用0,0,它超出了桌子。

虽然C#通常使用基于零的表索引,但是Excel Interop的程序员似乎遵循不同的方法。 这或他们想要保持统一,因为Excel表中的第一行是以1开始,而不是从0开始。我不是Excel的加速器,但是这是我最好的猜测。

编辑:每Siddharth的请求,这里是一个示例将DataGridView控件的内容复制到Excel工作表。 请注意,这只是演示基本function,并不是一个完整的示例或必然的最佳实践:

 #using Microsoft.Office.Interop; Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; xlApp = new Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Add(1); xlWorkSheet = Excel.Worksheet xlWorkBook.ActiveSheet; // Notice the index starting at [1,1] (row,column) for (int i=1; i<DataGridView.Columns.Count+1; i++) xlWorkSheet.Cells[1, i] = DataGridView.Columns[i - 1].HeaderText; for each(DataGridViewRow row in DataGridView.Rows) { for each (DataGridViewColumn column in DataGridView.Columns) { xlWorkSheet.Cells[row.Index+2,column.Index+1] = DataGridView.Rows[row.Index].Cells[column.Index].Value; } } 

注意索引之间的差异。 此示例首先复制DataGridView中的标题,然后偏移Excel工作表中的位置以复制其余数据,因为列标题不会在DataGrid中计入可索引单元格。 这可能也适用于DataTables。

尝试使用单元格的Value2字段。

 sheet.Cells[1,1].Value2 = "hello"; 

也在这一行

 Console.WriteLine(Globals.ThisAddIn.Application.Cells[1, 1]); 

“单元格”字段是工作表的属性。 您不能在Excel应用程序上使用它; 您需要先创build或打开工作簿 ,然后创build或使用现有的工作表

编辑 :忘记Excel范围是1索引,而不是0索引。