读取Excel文件作为服务器进程

我试图find一个适当的方式来读取NT服务器操作系统上的Excel文件的内容。 我有许多使用Excel API的问题,然后遇到Office自动化的官方微软,它指出,Excel API不适合Excel自动化。 我看到的种类问题与文章中描述的类似。

有没有另一种方式,我可以读取一个Excel文件(xls,xlsx,xlsm)在服务器上(没有用户界面)的方式,不会遭受强加在Excel API中的相同types的线程/安全/许可证问题?

有许多库被不同的用户强调,这将允许所需的function。 我在这里列出他们,其中一些评估,所以我试图放下有趣的评论比较他们。 我所包含的细节完全是基于观点的,但是这些库中的任何一个都可能达到要求的目标。

SpreadsheetGear.Net
(由于购买成本过高没有评估)

的Aspose.Cells
(由同事评估,看起来相当简单,性能堪比Excel Interop)。

GemBox
(没有评价)

Excel Services
(似乎只包含在SharePoint 2007中)

Excel映射器 (没有评估,因为它需要强types的对象导入到其中不符合我的要求)。

SmartXls
(没有评估,因为它需要强types的对象导入到其中不符合我的要求)。

ActiveXls
(相当容易使用,缺乏Properties就引发了问题,他们偏好使用方法来处理微不足道的操作,尽pipe它声称1Mlogging是由廉价的FlexCel执行的,但已经决定帮助/ API手册几乎是无用的。

Koogra
(由于没有find文件/信息而没有评估)

FileHelpers
(没有评价)

FLEXCEL
(成本最低的解决scheme,性能良好,并且与Excel Interop结构非常接近,实现起来非常简单,同时也得到了技术支持方面的快速回应。

SyncFusion BackOffice
(成本中等,结构合理,运行unit testing时遇到了更多的难度和不一致的结果,还收到了一些“试图读取受保护内存”的错误,这并不鼓励我使用纯粹的pipe理库。

我曾经使用过ADO.NET获取数据。 我不确定所有的Excel文件types,这将支持,但检查阅读和写作Excel电子表格使用ADO.NET C#DbProviderFactory

以下是一些 SO问题的代码 。

我能够读写excel,无需安装Office或任何第三方工具。

要使用C#读取Excel文件而不安装Excel,您可以使用Apache的POI。

这是一个用于读写MS Office格式的Java库。 既然是java,而你正在使用C#,你将需要IKVM和POI项目中的java类。

不过,最简单的方法就是下载Jon Iles的MPXJ项目,而且你已经掌握了一切。 只需设置一个对IKVM.OpendJDK.ClassLibrary.dllIKVM.Runtime.dllpoi-3.2-FINAL-20081019.dll的引用

我一起砍了一个快速的控制台应用程序,告诉你一个简单的方法来读取一个Excel .xls表。 它只读取第一个工作表,不使用行或单元格迭代器,但它的工作很好。

注意:您需要查看org.apache.poi.ss以确保您可以读取.xlsx等文件。

 //C# code for using the Apache POI libraries using System; using System.Collections.Generic; using System.Text; // poi for xls using org.apache.poi; using org.apache.poi.poifs; using org.apache.poi.poifs.filesystem; using org.apache.poi.hssf; using org.apache.poi.hssf.usermodel; using org.apache.poi.ss; namespace ConsoleApplication1 { class Test { static void Main(string[] args) { if (args.Length != 1) { Console.Out.WriteLine("Usage: XLSReadTest <xls file>"); } else { XLSRead x = new XLSRead(); x.Process(args[0]); //x.Process("c:\\temp\\testfile.xls"); } } } class XLSRead { public void Process(string inputFile) { int r = 0; Console.Out.WriteLine("Reading input file started."); DateTime start = DateTime.Now; java.io.InputStream inputStream = new java.io.FileInputStream(inputFile); POIFSFileSystem fs = new POIFSFileSystem(inputStream); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sh = wb.getSheetAt(0); r = sh.getFirstRowNum(); while (r <= sh.getLastRowNum()) { HSSFRow row = sh.getRow(r); int c = row.getFirstCellNum(); string val = ""; while (c < row.getLastCellNum()) { HSSFCell cell = row.getCell(c); switch(cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: val = cell.getNumericCellValue().ToString(); break; case HSSFCell.CELL_TYPE_STRING: val = cell.getStringCellValue(); break; } Console.Out.WriteLine("Row: " + r + ", Cell: " + c + " = " + val); c++; } r++; } long elapsed = DateTime.Now.Ticks - start.Ticks; String seconds = String.Format("{0:n}", elapsed / 1000000); Console.Out.WriteLine("\r\n\r\nReading input file completed in " + seconds + "s." + "\r\n"); } } } 

我不确定为什么SO上的广告与您的问题没有关联。

还有一些类似的微软Excel Services。 我想,这可以让你使用Excel的web服务风格。 我认为SpreadSheetGear是微软用来显示的广告。 🙂

Excel中。

经过多年努力阻止人们在服务器上使用Excel,他们已经放弃/接受了市场需求,并开始支持这一点。

2007年对此有一些倾向,而Excel 2010应该有更多。

这里是可以读取.xls和xlsx文件的东西。 它是开源的。 http://code.google.com/p/excelmapper/

它基本上是一个ORM,所以你只需要处理对象而不是OleDB。

你有没有试过用.net的SmartXLS ?

或者ActiveXLS ?

我想为了这个线程的好处,我不得不提到EPPlus。 它是codeplex中的一个开源项目。

我已经在多个项目中使用过,从来没有问题。