不幸的是,OLEDB和FileUploadControl似乎都想要一条路径。
现在,这可以在用户提交excel文件后使用,但由于0文件系统访问权限而无法在我的服务器上运行:
FileUploadControl.SaveAs(filePath);
ConvertToCSV(filePath);
...
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", filePath);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
我看到FileUploadControl公开了一个流和一个字节码。是否可以使用这些属性遍历文件?
答案 0 :(得分:1)
AFAIK OleDB不适用于流......
如果您真的想在上传后直接在内存中访问Excel文件,那么您将需要一些第三方组件(如Flexcel,Aspose.Cells,SpreadsheetGear ...),它们可以直接从内存中加载Excel文件( FileUploadControl.FileBytes
或FileUploadControl.FileContent
)...
虽然不确定ConvertToCSV
做了什么以及它是否可以用于记忆......
答案 1 :(得分:1)
我能够使用以下代码从流中读取值没有问题:
Stream myStream = MyFileUpload.FileContent;
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(myStream);
DataSet result = excelReader.AsDataSet();
string r1c1Val = result.Tables[0].Rows[0][0].ToString();
显然,我的示例非常简单,但将数据作为DataSet可以为您提供阅读方式的灵活性。