打开Excel的最快方法

8
我一直在使用 Microsoft.Office.Interop.Excel 库来打开 Excel,刷新一些查询并保存。问题在于,只有当每台计算机上安装了与项目中选择的相同的 Excel 库时,才能正常运行。
我发现 NPOI 可以读写 Excel 数据,具体情况请查阅http://npoi.codeplex.com/documentation。但是,如果只是简单的打开、刷新和保存,NPOI 是否支持呢?
如果您使用这种语法,似乎可以打开我的 Excel 文件,但如何刷新查询和保存呢?
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

private void button1_Click(object sender, EventArgs e)
{
    HSSFWorkbook hssfwb;
    using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
    {
      hssfwb= new HSSFWorkbook(file);
    }

我无法与NPOI交流,但是可以通过将COM互操作类型嵌入到您的程序集中来实现某些Office版本的独立性。有关详细信息,请参见https://msdn.microsoft.com/en-us/library/ee317478.aspx。 - cokeman19
2个回答

1

你也可以使用OLEDB适配器

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + excelfilepath+ "; Extended Properties = \"Excel 8.0;HDR=NO;IMEX=1\";"); /*for office 2007 connection*/
conn.Open();
   string strQuery = "SELECT * FROM [" + Table + "]";
   System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
 System.Data.DataTable ExcelToDataTable = new System.Data.DataTable();
 adapter.Fill(ExcelToDataTable);

0
通过“刷新查询”我理解你的意思是Excel文件链接到某个数据源,你想要使用该数据源的当前数据更新Excel文件的内容。
如果你希望这个过程是“自动”的(即你不需要自己编写代码来进行更新),那么我认为Excel是唯一的选择。我非常确定像NPOI(或EPPlus、ClosedXML)之类的库不会做到这一点。但是,如果你可以轻松地查询数据源,你可能可以使用这些库将值插入到电子表格中。
由于你谈论了多台计算机,我假设你正在构建一个部署到各个用户的插件或EXE。在这种情况下,你可能希望针对你能够支持的最低版本的Excel进行构建。换句话说,你希望在开发机器上拥有Excel 2003或2007。(如果你可以放弃对2003的支持,你的生活会变得更容易)。
如果你针对Excel 200x进行构建,那么它应该可以在后续版本上正常运行。反之则不然。请注意,你不希望在开发机器上安装多个版本。

使用COM引用时,每次只能安装一个引用。因此,我一直无法找到一种方法来构建2003版本并打开2007版本,反之亦然。因此,我正在研究其他可能的.dll文件。 - MasterOfStupidQuestions
是的,但COM组件往往具有向后兼容性,因此如果您引用了1.x版本而用户使用的是2.x版本,它仍然可以工作。 - Gary McGill
不是我的经验。例如,如果我使用Microsoft Excel 12.0对象库并像这样实例化Excel,如果用户没有安装Excel 2007,则每次都会出现语法错误。公共静态Excel.Application oXL;oXL = new Excel.Application(); oXL.Visible = true; oXL.DisplayAlerts = false; oXL.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow; - MasterOfStupidQuestions
应该可以工作。你是如何部署你的EXE文件的?你需要确保从你构建的Excel版本中复制主要互操作程序集到部署文件夹,而不是依赖于GAC中的更新版本的PIA。 - Gary McGill
我正在使用Windows表单,但没有确保我的Excel版本的PIA被复制到部署文件夹中。我应该怎么做? - MasterOfStupidQuestions
啊,部署问题。我记得在创建我的第一个加载项时,完成了90%的工作,只发现还有另外90%的“部署”要完成。这很难,也不好玩(尽管在你的情况下应该更容易,因为你不是在创建加载项,所以不必担心Office安全模型)。我无法在评论中回答您的问题,而且我也只能从遥远的记忆中回答。最好通过谷歌搜索或提出另一个问题。但在短期内,只需将PIA dll复制到安装文件夹即可,即使您需要手动执行此操作。 - Gary McGill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接