c#excel。如何通过工作簿/表格作为参考

时间:2018-04-17 00:29:42

标签: c# excel reference

我想传递一个excel工作簿/工作表作为几个函数之间的参考,以便对它进行不同的操作。我一直在寻找几个小时,无法找到如何做到这一点。以这种方式在excel表上运行多个功能是不常见的做法吗?以下代码不起作用..如果我通过值也不起作用。

' System.Runtime.InteropServices.COMException:'来自HRESULT的异常:0x800401A8' '

pass_ref(ref xlWorkSheet1);  //call this


void pass_ref(ref Excel.Worksheet sheet) {

        MessageBox.Show("Pass Ref:" + sheet.Name); //can't produce sheet name
    }

2 个答案:

答案 0 :(得分:0)

xlWorkBook.SaveAs(path, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);

pass_ref(xlWorkSheet1);


xlWorkBook.Close(true, misValue, misValue);

找到了解决方法。在尝试传递工作表之前保存工作簿。这很有效。

答案 1 :(得分:-1)

处理Office格式有三种基本方法,具体取决于您需要支持的方式。而另一个可能会更好:

  • 您只需要新的格式(xlsx)。您可以使用OpenXML SDK或任何Wrapper类。在紧要关头,您可以使用ZipArchive和XMLReader类来修改这些格式。它们只是.zip容器中的一堆XML文件。
  • 你需要支持新旧。 (t)生锈的办公室COM互操作是通常的方式。这就是你现在选择的。当然,除了COM互操作所固有的所有正常问题之外,它还需要安装办公室,并且不能从非交互式(服务,服务器)运行。我打赌你会遇到其中一个。
  • 您需要支持新旧2:OleDB Provider。我只被告知这个选项并且没有真正的知识。

我总是建议选择OpenXML SDK / Option 1.而是限制支持的格式,然后再回到COM方式。 OleDB将是我的第二个赌注,尽管不知道细节。如果没有别的办法,COM最好留作后备解决方案。