Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Excel API C获取单元格值#_C#_Api_Excel_Vba - Fatal编程技术网

C# 从Excel API C获取单元格值#

C# 从Excel API C获取单元格值#,c#,api,excel,vba,C#,Api,Excel,Vba,我有一个为Excel制作的功能区,以及一个cs文件,作为外接程序的核心。 单击CustomRibbon上的按钮时,我希望解析其中一行的数据值 private void button1_Click(object sender, RibbonControlEventArgs e) { Console.WriteLine(Globals.ThisAddIn.Application.Cells[0, 0]); } 但这给了我一个错误 来自HRESULT的异常:

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

它也会给我一个错误。

尝试使用单元格的值2字段

sheet.Cells[1,1].Value2 = "hello";
也在这一行

Console.WriteLine(Globals.ThisAddIn.Application.Cells[1, 1]);
“单元格”字段是工作表的属性。您不能在Excel应用程序上使用它;您需要先创建或打开工作簿,然后创建或使用现有的工作表


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

尝试使用单元格的值2字段

sheet.Cells[1,1].Value2 = "hello";
也在这一行

Console.WriteLine(Globals.ThisAddIn.Application.Cells[1, 1]);
“单元格”字段是工作表的属性。您不能在Excel应用程序上使用它;您需要先创建或打开工作簿,然后创建或使用现有的工作表

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

用于引用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;
    }
}
#使用Microsoft.Office.Interop;
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
xlApp=new Excel.ApplicationClass();
xlWorkBook=xlApp.Workbooks.Add(1);
xlWorkSheet=Excel.Worksheet xlWorkBook.ActiveSheet;
//注意索引从[1,1](行,列)开始
对于(int i=1;iExcel工作表中引用单元格的“最低”适用索引是[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;
    }
}
#使用Microsoft.Office.Interop;
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
xlApp=new Excel.ApplicationClass();
xlWorkBook=xlApp.Workbooks.Add(1);
xlWorkSheet=Excel.Worksheet xlWorkBook.ActiveSheet;
//注意索引从[1,1](行,列)开始

对于没有工作表限定符的(int i=1;i
Cells[r,c]
单元格,默认为活动工作表。
Cells[r,c]
没有工作表限定符的单元格,默认为活动工作表。+1解释得很好。也许您还可以包括一个代码示例:)+1解释得很好。也许您还可以包括一个代码示例:)