我想上传一个Excel电子表格到IIS,然后导入其内容

我需要能够使用file uploadfunction导入Excel电子表格的内容。 用户必须能够将file upload到networking服务器,然后将其打开并导入其内容。 步骤是:

  1. 上传文件
  2. 打开它并从顶行读取列标题
  3. 将列映射到我可以接受的列中
  4. 执行导入。

我可以用CSV来做到这一点,但CSV文件很容易损坏,我想用Excel文件来做。 除了作为一个字节stream,我不能直接打开文件。

有什么帮助吗?

谢谢…

我发现从Excel文件读取的一种方法是使用ODBC。 我做了一次类似的项目。 基本上,你可以把excel文件作为一个单一的表“数据库”。 从那里,您可以根据需要轻松查询行/列。

下面的代码项目很好地总结了一下:

http://www.codeproject.com/KB/database/excel_odbc.aspx

我以前用ASP.NET做过这个,可能是为了同样的目的。 基本上是允许批量导入logging到数据库中。 基本的想法是:

  1. 让用户上传文件,服务器将其保存在文件系统的某个位置

  2. 使用ADO.NET像任何其他数据库连接一样连接到Excel文件

  3. 使用标准的ADO.NET数据采集器和数据表来获取数据并将其加载到导入过程中

关于使用ADO.NET的一个很好的事情是,你实际上可以修改Excel文件,在我的项目中,我通过在文件中logging每行的状态或错误信息来做到这一点。 然后,我有一个界面,用户可以下载更新的Excel文件,并知道哪些logging导入问题,以便他们可以修复这些logging,并尝试再次提交。

编辑:如果要求是你不能写入文件到磁盘并在ADO.NET连接string中引用它,那么你可能会看第三方库,以便能够在内存中的Excel文件。 看到这个其他的问题 。

SpreadsheetGear for .NET可以从文件(Factory.GetWorkbook(filename)),stream(Factory.GetWorkbookSet()。Workbooks.OpenFromStream(stream))或字节数组(Factory.GetWorkbookSet())打开Excel工作簿。 .OpenFromMemory(byteArray)),并具有Excel兼容API,如workbook.Worksheets [index] .Cells [row,col] .Value,它返回一个单元格或工作簿的原始值。[表单] .Cells [row,col ] .Text将以stringforms返回单元格的格式化值。

您可以在这里看到实时的ASP.NET示例,并在此处下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC

你可以使用Apache的POI。

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

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

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

用一个非常小的努力,我相信你可以弄清楚如何使用inputstream而不是文件。

 //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"); } } }