问题 是否可以使用多标签/表格的csv?


我正在调用Web服务,来自Web服务的数据采用csv格式。 如果我尝试在xls / xlsx中保存数据,那么我会在工作簿中获得多个工作表。 那么,如何在c#中使用多个tab / sheet保存数据。

我知道带有多个标签的csv是不实用的,但是有没有该死的方式或任何库来保存带有多个标签/表格的csv中的数据?


8165
2018-04-13 21:12


起源

可能的选择 - technet.microsoft.com/en-us/magazine/2006.01.blogtales.aspx - MethodMan
csv的“多个标签/表”是什么意思?那么,当在Excel中打开时,您将获得多个标签? - Ann L.
您无法使用多个标签保存CSV - Praveen Paulose
是否有可能将它转换为XML(由@MethodMan建议)? - Ann L.
保存和检索XML并不复杂? @MethodMan给出的链接要求您手动设置。 - hello temp9


答案:


CSV,作为文件格式,假设一个“数据表”;在Excel术语中,这是一张工作簿。虽然它只是纯文本,并且您可以按照您想要的任何方式进行解释,但“标准”CSV格式不支持您的主管的想法。

你可以用几种方法来捏造你想要的东西:

  • 为每个工作表使用不同的文件,具有相关但不同的名称,如“Book1_Sheet1”,“Book1_Sheet2”等。然后,您可以在第一个下划线之前按文本查找相关文件组。这是最容易实现的,但是要求用户按照逻辑“工作簿”来处理多个文件,如果在混乱中丢失了,那么您就丢失了这些数据。

  • 执行上述操作,并将文件“压缩”到一个可以移动的存档中。你保持上述选项的纯CSV优势,加上一个文件移动而不是几个文件的便利,但是必须压缩/解压缩存档以获取实际文件的缺点。为了减轻痛苦,如果您使用的是.NET 4.5,则可以访问内置的ZipFile实现,如果不是,则可以使用开源DotNetZip或SharpZipLib,其中任何一个都允许您以编程方式创建和使用标准的Windows ZIP文件。您还可以使用几乎通用的.tar.gz(aka .tgz)组合,但您的用户需要您的程序或第三方压缩工具(如7Zip或WinRAR)才能从一组导出的CSV中创建存档。

  • 实现准CSV格式,其中空行(仅包含换行符)充当“制表符分隔符”,并且您的解析器将期望新的列标题后跟新配置中的数据行。 CSV的其他使用者可能无法读取此标准CSV的变体,因为它不符合预期的文件格式,因此我建议您不要使用“.csv”扩展名,因为它会使用户期望混淆和挫败能够在电子表格等其他应用程序中打开它。


8
2018-04-13 22:07



谢谢。你能给我一个例子来实现一个准空格行作为分离的准csv格式。 - hello temp9
这很简单;简单地解析CSV行正常(第一行是标题,然后是与这些标题匹配的数据行),但在解析数据行之前,请测试该行是否包含任何非空白字符。如果没有,则中断数据行解析并使用新集合重复列标题逻辑以存储下一个工作表的数据。任何比这更具体的东西,你会问我可以输入的代码,而这不是这个网站的用途。 - KeithS


如果我尝试在xls / xlsx中保存数据,那么我会在工作簿中获得多个工作表。

你的答案在你的问题中,不要使用text / csv(当然可以  做多张纸,甚至不能做一张;虽然有些应用程序如Excel或Calc选择将其导入到具有工作表的格式中,但是没有像text / csv中的工作表这样的东西但是将其保存为xls,xlsx,ods或其他具有工作表的格式。

XLSX和ODS都比text / csv复杂得多,但每个都可能是各自格式中最直接的格式。


3
2018-04-13 21:19



我得到的数据是CSV格式,我被告知只能将其保存在csv中。因为服务器可能不支持Excel和Office.Interop我想要检索某些值。 - hello temp9
c#/ Asp.net中没有可以制作多张图书的库吗? - hello temp9
您不希望在服务器上使用Excel - 它显然不是为重度多线程,非UI使用而设计的。有很多库可以在服务器环境中生成Excel文件(纯.NET代码,没有外部依赖);有很多很好的付费,可能还有一些免费的。 - Joe White
CSV中不能有多张工作表,因为CSV没有工作表。 - Jon Hanna
请你的主管指出这一点 ietf.org/rfc/rfc4180.txt 这显示了如何指定工作表。他们将无法做到,因为它不在那里。这就像询问如何在CSV上打开声音一样。同时,XLSX文件是一些相关XML和文本文件的内部zip文件。它们不是很容易以编程方式构建,但它们也不是非常难。 - Jon Hanna


我一直在使用这个库一段时间了,

https://github.com/SheetJS/js-xlsx

在我的项目中从以下格式导入数据和结构:xls(x),csv和xml但你可以肯定保存在那些格式中(全部来自客户端)!

希望能帮到你,看看在线演示,

http://oss.sheetjs.com/js-xlsx/

查看源代码或向GH提出问题?但我认为你必须自己做大部分编码


2
2018-04-13 22:30



所以你说的是多表csv可能吗? - hello temp9
不,那东西不存在,csv是粗糙格式,旧格式但主要用于数据传输,没有多任何东西:) - Kresimir Pendic
这似乎真的很好。你能指导我如何在我的视觉工作室中使用这个库吗? - hello temp9
我想提取每行被一行删除的文件的csv,这就是这个库给出的内容。但请帮我安装这个库。 - hello temp9


我想你想减少excel文件的大小。如果是,则可以将其保存为xlsb即Excel二进制工作簿格式。此外,您可以通过删除所有空白单元格来减小文件大小。

我希望这能解决你的问题。


0
2017-12-28 08:34