我正在调用Web服务,来自Web服务的数据采用csv格式。 如果我尝试在xls / xlsx中保存数据,那么我会在工作簿中获得多个工作表。 那么,如何在c#中使用多个tab / sheet保存数据。
我知道带有多个标签的csv不实用,但是有没有任何方法或任何库来保存带有多个标签/表格的csv中的数据?
答案 0 :(得分:10)
CSV,作为文件格式,假设一个“数据表”;在Excel术语中,这是一张工作簿。虽然它只是纯文本,并且您可以按照您想要的任何方式进行解释,但“标准”CSV格式不支持您的主管的想法。
你可以通过几种方式捏造你想要的东西:
为每张工作表使用不同的文件,并使用相关但不同的名称,例如“Book1_Sheet1”,“Book1_Sheet2”等。然后,您可以在第一个下划线之前按文本查找相关文件组。这是最容易实现的,但是要求用户在每个逻辑“工作簿”中使用多个文件,如果在混乱中丢失了,则丢失了这些数据。
执行上述操作,并将文件“压缩”为可以移动的单个存档。你保留了上述选项的纯CSV优势,加上一个文件移动而不是几个文件的便利,但是必须压缩/解压缩存档以获取实际文件的缺点。为了减轻痛苦,如果您使用的是.NET 4.5,则可以访问内置的ZipFile实现,如果不是,则可以使用开源DotNetZip或SharpZipLib,其中任何一个都允许您以编程方式创建和使用标准的Windows ZIP文件。您也可以使用几乎通用的.tar.gz(又名.tgz)组合,但您的用户需要您的程序或第三方压缩工具(如7Zip或WinRAR)才能从一组导出的CSV中创建存档。
实现准CSV格式,其中空白行(仅包含换行符)充当“制表符分隔符”,并且您的解析器将期望在新配置中添加新行列标题,后跟数据行。 CSV的其他使用者可能无法读取此标准CSV的变体,因为它不符合预期的文件格式,因此我建议您不要使用“.csv”扩展名,因为它会使用户期望混淆和挫败能够在电子表格等其他应用程序中打开它。
答案 1 :(得分:5)
如果我尝试在xls / xlsx中保存数据,那么我会在工作簿中获得多个工作表。
你的答案在你的问题中,不要使用text / csv(大多数肯定可以不做多张纸,它甚至不能做一张纸;没有一张纸这样的东西在text / csv中虽然有些应用程序如Excel或Calc选择将其导入到具有工作表的格式中)但是将其保存为xls,xlsx,ods或其他具有工作表的格式。
XLSX和ODS都比text / csv复杂得多,但每个都可能是各自格式中最直接的格式。
答案 2 :(得分:3)
我现在一直在使用这个库,
https://github.com/SheetJS/js-xlsx
在我的项目中从以下格式导入数据和结构:xls(x),csv和xml但你可以肯定保存在那些格式中(全部来自客户端)!
希望能帮到你,看看在线演示,
http://oss.sheetjs.com/js-xlsx/
查看源代码或提交GH问题?但我认为你必须自己做大部分编码
答案 3 :(得分:0)
我认为您希望减小excel文件的大小。如果是,则可以将其保存为xlsb即Excel二进制工作簿格式。此外,您可以通过删除所有空白单元格来减小文件大小。