C#Excel DataTableReader对当前的DataTable' Sheet1'

时间:2016-12-19 21:34:13

标签: c# asp.net-mvc excel

thread似乎没有帮助我。

我想要做的是读取excel .xlsx文件内容以替换某些单元格的值并将新文件内容返回给客户端。但原始文件应保持原样。我不想将新文件保存到系统中 - 它不是解决方案。

以下是代码:

string excelFilePath = this.Server.MapPath("~/App_Data/Test.xlsx");
var fileStream = System.IO.File.Open(excelFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
Excel.IExcelDataReader exReder = Excel.ExcelReaderFactory.CreateOpenXmlReader(fileStream);

System.Data.DataSet dataSet = null;
using (exReder)
{
    dataSet = exReder.AsDataSet();
}

if (dataSet == null)
{
    throw new ArgumentNullException("Cannot Make Data Set");
}

dataSet.Tables[0].Rows[0].ItemArray = new[] { "Microsoft", "Test", "ASP.NET" };
bool hasChanges = dataSet.HasChanges(); // true

dataSet.AcceptChanges();
bool hasChanges2 = dataSet.HasChanges(); // false

var dataReader = dataSet.CreateDataReader(dataSet.Tables[0]); 
TextReader textReader = dataReader.GetTextReader(1); // 1 is ordinal no matter what I pass it throws an exception
byte[] results = System.Text.Encoding.UTF8.GetBytes(textReader.ReadToEnd());

return this.File(results, System.Net.Mime.MediaTypeNames.Application.Octet);

我正在使用http://exceldatareader.codeplex.com/

dataReader.GetTextReader(1);总是抛出异常。如何制作这个文本阅读器?或者只是在更改后得到字节?

2 个答案:

答案 0 :(得分:0)

考虑使用Microsoft提供的Excel.Interop .net库。它们原生设计用于执行这些功能。这是一个dotnetperls blog

答案 1 :(得分:0)

目前,我找到了http://epplus.codeplex.com/的解决方法。