我正在尝试在MVC 5中编写一个应用程序来接受用户指定的文件并将该文件信息上传到数据库中。该文件本身有多个工作表,我认为FileHelpers处理得很好,但我找不到任何关于使用字节数组的好文档。我可以把文件弄好,然后到我的控制器,但不知道从哪里去。我目前正在控制器中执行此操作:
public ActionResult UploadFile(string filepath)
{
//we want to check here that the first file in the request is not null
if (Request.Files[0] != null)
{
var file = Request.Files[0];
byte[] data = new byte[file.ContentLength];
ParseInputFile(data);
//file.InputStream.Read(data, 0, data.Length);
}
ViewBag.Message = "Success!";
return View("Index");
}
private void ParseInputFile(byte[] data)
{
ExcelStorage provider = new ExcelStorage(typeof(OccupationalGroup));
provider.StartRow = 3;
provider.StartColumn = 2;
provider.FileName = "test.xlsx";
}
我能否像FileHelpers一样使用Request?我只需要将Excel文件读入数据库。如果没有,我应该采用不同的方式来处理上传吗?
答案 0 :(得分:3)
所以,我决定使用ExcelDataReader从Excel中读取数据。它将流(在下面的代码中,测试)放入一个我可以手动操作的DataSet中。我敢肯定它可能不是最干净的方法,但它对我来说很有意义,并且允许我很容易地使用多个工作表。以下是我最终使用的常规代码片段:
//test is a stream here that I get using reflection
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(test);
DataSet result = excelReader.AsDataSet();
while(excelReader.Read())
{
//process the file
}
excelReader.Close();