我正在调用一个Web服务,来自Web服务的数据是csv格式的。如果我尝试将数据保存在xls/xlsx中,那么我在工作簿中获得了多个工作表。那么,我如何将数据保存在csv中,并在c#中使用复用表/工作表。
我知道有多个选项卡的csv是不切实际的,但是有什么该死的方法或任何库可以在有多个选项卡/工作表的csv中保存数据吗?
CSV作为一种文件格式,假设一个“表”数据;在Excel术语中,这是工作簿的一个工作表。虽然它只是纯文本,你可以以任何你想要的方式解释它,但“标准”CSV格式不支持你的主管的想法。
你可以通过几种方式捏造你想要的东西:
>
为每个工作表使用不同的文件,具有相关但不同的名称,如“Book1_Sheet1”、“Book1_Sheet2”等。然后,您可以通过第一个下划线之前的文本找到相关文件组。这是最容易实现的,但需要用户在每个逻辑“工作簿”中处理多个文件,如果其中一个在混洗中丢失,您就丢失了该数据。
执行上述操作,并将文件“压缩”到一个可以移动的存档中。您保留了上述选项的纯粹CSV优势,以及移动一个文件而不是多个文件的便利性,但缺点是必须压缩/解压缩存档才能访问实际文件。为了减轻痛苦,如果你在。NET4.5你可以访问内置的ZipFile实现,如果你没有,你可以使用开源的DotNetZip或SharpZipLib,其中任何一个都允许你以编程方式创建和使用标准的Windows ZIP文件。您还可以使用几乎通用的. tar.gz(又名.tgz)组合,但您的用户将需要您的程序或第三方压缩工具(如7Zip或WinRAR)来从一组导出的CSV创建存档。
实现一种准CSV格式,其中空行(仅包含换行符)充当“制表符分隔符”,您的解析器将期望在新配置中出现一行新的列标题,后跟数据行。标准CSV的这种变体可能无法被CSV的其他使用者读取,因为它不符合预期的文件格式,因此我建议您不要使用“. csv”扩展名,因为它会让期望能够在电子表格等其他应用程序中打开它的用户感到困惑和沮丧。
如果我尝试将数据保存在xls/xlsx中,则会在工作簿中获得多个工作表。
答案就在你的问题中,不要使用text/csv(这肯定不能做多个工作表,它甚至不能做一个工作表;text/csv中没有工作表这样的东西,尽管一些应用程序(如Excel或Calc)选择将其导入具有工作表的格式),但将其保存为xls、xlsx、ods或其他具有工作表的格式。
XLSX和ODS都比text/csv复杂得多,但它们可能都是各自格式中最简单的。
我已经使用这个图书馆一段时间了,
https://github.com/SheetJS/js-xlsx
在我的项目中,从以下格式导入数据和结构:xls(x)、csv和xml,但您也可以以该格式保存(全部来自客户端)!
希望能帮到你,看看在线演示,
http://oss.sheetjs.com/js-xlsx/
偷看源代码或在GH上提交问题?但我认为您必须自己完成大部分编码