【发布时间】:2021-02-18 11:18:45
【问题描述】:
我有一个场景,我有一个存储 Blob,其中包含 Excel 文件,因此在代码级别我没有物理文件路径,所以它的文件流我将获得代码。我需要将其转换为 CSV 并将其推回存储。
尝试如下:-
-
尝试使用
Microsoft.Office.Interop.ExcelExcel.Application app = new Excel.Application(); app.DisplayAlerts = false; // Open Excel Workbook for conversion. Excel.Workbook excelWorkbook = app.Workbooks.Open(sourceFile); // Save file as CSV file. excelWorkbook.SaveAs(destinationFile, Excel.XlFileFormat.xlCSV);
问题:- 在 SourcePath 中,我没有物理位置,而且似乎没有过载占用字节或文件流。
-
试过
https://github.com/youngcm2/CsvHelper.Excel,Demo代码如下。using var reader = new CsvReader(new ExcelParser(FileContent, "JOB STATUSES", new CsvConfiguration(CultureInfo.CurrentCulture)));
甚至尝试过下面的代码:-
using var parser = new ExcelParser(FileContent,CultureInfo.InvariantCulture); using var reader = new CsvReader(parser);
但是这里 ExcelParser 失败了 Corrupterdfile with a valid CSV :(
问题:- 虽然这里有一个 OverLoad 来传递 Stream,但在我的情况下很重要。因为我没有特定的文件格式。它可以是任何随机 EXCEL 文件。没有我可以定义的特定类。
我错过了一些东西,任何人都可以帮助解决这个问题。
我的情况:-
- 没有文件位置的物理路径。它在存储帐户中,所以是 Stream/Byte 。
- EXCEL 文件可以是任意数量的行或列,没有固定模型,我只能拥有一张纸。
【问题讨论】:
-
Office interop 只能在本地计算机上运行,因为您需要安装 office 等。这只是行不通。它不是为在网络服务器上使用而设计的
-
如果您只是将文件流式传输到应将其发送到客户端的输出流,则不需要 office 流式传输文件
-
是的,没错。你的意思是,文件流&转换内容类型&用.csv推回?
-
不,在我的情况下,它是从一种格式转换为另一种格式,然后进行流式转换然后发送。
标签: c# excel asp.net-core .net-core csvhelper