将html字符串写入csv文件

Posted

技术标签:

【中文标题】将html字符串写入csv文件【英文标题】:Write html strings to csv file 【发布时间】:2016-10-22 23:36:24 【问题描述】:

是否可以将html字符串输出到csv。

尝试将数据从 cms 导出到 csv 和 Excel。每段 html 都可以包含逗号和其他任何内容。

EG. <p class="myclass">This is an example, of the string</p>

在 Excel 中导入中断,尽管前几行是正确的,但错误的数据出现在错误的列中。

我想实现这种格式

col1,col2,col3
"1","<p class="myclass">This is an example, of the string</p>","and more html here"

我已经尝试过这种事情 - 我正在迭代 cms 中的内容项并将每个属性输出为单独的 csv 数据值,用引号括起来并用逗号分隔。

foreach (var prop in offer.Properties) //.Where(x=>x.Alias != "Id"))


    var @propValue = prop.Value.ToString().Replace("\"", "'");

    // Append comma except last
    sb.Append(prop != offer.Properties.Last()
        ? "\"" + propValue + "\","
        : "\"" + propValue + "\"");

sb.Append(Environment.NewLine);

更新: 事实上,这项任务被证明充满了困难。最初的目标是快速将一组节点及其属性从 Umbraco CMS 导出到 Excel 文件。我了解到对于这种类型的数据,csv 可能不是正确的格式,它完全基于存储在 xml 中的数据,包括编码的 html sn-ps。

在我们的例子中,实现我们想要的最佳方式是将导出的数据输出为 Excel 可以理解的 html 表格,该表格保持编辑器友好的格式,而不是编码的 html sn-ps。

【问题讨论】:

你想要实现什么?你想把&lt;p class="myclass"&gt;This is an example, of the string&lt;/p&gt; 解析成什么?给我们一些示例 od 输出! 刚刚添加了所需格式的更多说明 为什么不用 EPPlus 创建一个真正的 Excel 文件?生成工作表可以像ws.LoadFromDataTable(someTable);ws.LoadFromCollection(someList); 一样简单。除此之外,尝试将 HTML 放入 CSV 只是自找麻烦。您不能简单地替换或编码所有引号,因为 HTML sn-p 可能已经包含编码字符串。您可以尝试使用一些真正意想不到的字符作为列和行分隔符,例如 ¤ 和 ¶ @wingyip 如果对数据没有严格限制,例如没有换行符、没有转义引号、属性只有单引号等,您所问的可能是不切实际的。真正的 问题是什么你想解决?为什么您认为以 CSV 格式导出 HTML 是解决方案? 感谢您让我想到替代方案@PanagiotisKanavos 【参考方案1】:

你可以HtmlEncode 去掉你的引号“。”的字符串。

string data = "<p class=\"myclass\">This is an example, of the string</p>";
Server.HtmlEncode(data);

https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx

编辑:

"&lt;a href=&amp;quote;http://www.example.com&amp;quote;&gt;link&lt;/a&gt;","&lt;b&gt;more html&lt;/b&gt;"

【讨论】:

逗号呢? 您的逗号将被 CSV 字符串包围。查看更新的答案。【参考方案2】:

在编码/解码 csv 时,我宁愿使用插件/库,当我自己尝试这样做时,我会咬自己一些讨厌的用例(如何根据语言环境记录小数,不均匀的数据, 转义字符等。)我使用了 CsVHelper 的调整版本,但你可以在网上找到很多不同的版本。

关于您的更新。我建议不要直接用html填充你的csv,而是用实际值填充它。将您的 View Logic 远离您的 Model Logic 。让我们做一个简单的例子。

<table>
  <tr>
    <th>A</th>
    <th>B</th> 
    <th>C</th>
  </tr>
  <tr>
    <td>1</td>
    <td>2</td> 
    <td>3</td>
  </tr>
</table>

如果我以这种格式给你数据:

A B C
1 2 3

甚至是这种格式:

A,B,C
1,2,3

您可以很容易地根据这些数据重新创建 html 表;或创建图表;或word文档;或您希望向用户展示模型的任何方式。

反之,表格中的一组数据

 <th>A</th>,    <th>B</th> ,    <th>C</th>
 <td>1</td>,    <td>2</td> ,    <td>3</td>

每次您要在除 html 之外的不同上下文中使用数据时,都会强制您进行解析。将视图和模型放在不同的位置将使您的工作更轻松。

【讨论】:

以上是关于将html字符串写入csv文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据作为字符串(不是文件)写入 CSV 格式?

pandas to_csv:将 pandas 写入 csv 时抑制 csv 文件中的科学记数法

将 php 中包含的 HTML 表单信息写入 CSV 文件

使用“,”将包含字符串的分号写入 CSV,因为分隔符仍然会导致 CSV 文件中的分隔

将 Python 列表写入 csv 文件

python:将numpy数组写入csv文件