2

我有一个为 Excel 制作的功能区以及一个用作加载项核心的 cs 文件。单击 CustomRibbon 上的按钮时,我想解析其中一行的数据值。

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

    }

但这给了我一个错误

HRESULT 异常:0x800A03EC

我想做的就是能够解析工作表上单元格中的数据并将数据写入工作表。即使在我启动程序时:

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

它也给了我一个错误。

4

2 回答 2

6

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

尽管 C# 通常使用从零开始的表索引,但 Excel Interop 的程序员似乎遵循了不同的方法。那或者他们想要保持他们的约定统一,因为 Excel 表中的第一行以 1 开头,而不是 0。我不是 Excel 爱好者,但这是我最好的猜测。

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

#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。

于 2013-01-15T19:27:51.027 回答
-1

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

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

也在这一行

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

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

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

于 2013-01-15T18:57:28.577 回答