【问题标题】:Getting Cell Values from Excel API C#从 Excel API C# 获取单元格值
【发布时间】:2012-12-29 22:44:22
【问题描述】:

我有一个为 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";

它也给了我一个错误。

【问题讨论】:

    标签: c# api excel vba


    【解决方案1】:

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

    【讨论】:

    • + 1 解释得很好。也许您还可以包含一个代码示例:)
    【解决方案2】:

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

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

    也在这一行

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

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

    编辑:忘记了 Excel 范围是 1-index 而不是 0-index。

    【讨论】:

    • Cells[r,c] 没有工作表限定符默认为活动表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多