【问题标题】:Insert HTML into CSV programmatically in Java or Scala在 Java 或 Scala 中以编程方式将 HTML 插入 CSV
【发布时间】:2013-10-13 08:04:52
【问题描述】:

我希望以编程方式创建一个简单的 3 列 csv 文件来表示电子邮件。本质上,csv 文件中的每一行将包含 3 列:

  1. 电子邮件地址
  2. 主题行
  3. html 内容/电子邮件正文

我希望用 Java / Scala 来解决这个问题。我遇到的问题是,由于格式的原因,我似乎无法让它适合 3 列。我已经尽我所能将它保存为一个简单的 1 行字符串(见下文),但我想知道这是否可能是 csv / excel 文件的一般限制,因为我什至无法手动将 html 存储到单细胞。

有人知道这是否可能吗?如果可能,我想保留所有格式,因为在接收端这将被解析并用于发送真实的电子邮件。

提前谢谢大家。

示例 Scala 脚本:
#!/usr/bin/env scalas
!#

import java.io.FileWriterenter    
import java.io.IOException    
import scala.xml.Utility

val emailAddress = "abc123@gmail.com"    
val subjectLine = "New Sales Are Live, Check It Out..."     
val body = scala.io.Source.fromFile("sample_email.html").mkString     
val writer = new FileWriter("output.csv")      

(0 to 10).foreach { _ =>       
writer.append(emailAddress).append(",")       
        .append(subjectLine).append(",")      
            .append(body).append("\n")      
}       

writer.flush()      
writer.close()        

【问题讨论】:

  • 您需要转义字符串并删除所有换行符才能使其正常工作。您应该快速搜索解析器,有很多开源选项可以为您完成大部分工作。我还会质疑您以这种方式存储它的理由,在这样的情况下使用 XML 可能更有意义(CDATA 部分),看起来您正在为没有很多回报而自找麻烦。
  • CSV 比用逗号分隔列表要复杂一些:如何转义逗号和换行符?如果引用这些值,如何转义引号?使用现有的 CSV 库可能比尝试实现自己的库更好。但就像丹尼尔说的那样,CSV 似乎并不适合这种数据......
  • 您好,感谢您的 cmets。我实际上不想使用 CSV,但不幸的是,此数据的接收者需要 CSV 格式。我将研究一个 csv 库。下面有人推荐opencsv,将从那里开始。再次感谢。

标签: java html excel scala csv


【解决方案1】:

就像其他人一样,我建议使用现有的 csv 库之一来正确转义各种字符。这是其中之一:http://opencsv.sourceforge.net/

SBT 依赖:

"net.sf.opencsv" % "opencsv" % "2.3"

或者只要下载一个 jar,因为你有一个 shell 脚本并将它放在类路径中。

你可以这样使用:

val os = ...OutputStream...
val w = new CSVWriter(new OutputStreamWriter(os, "UTF-8"))
w.writeAll // or: w.writeNext ... etc

【讨论】:

  • 感谢您的推荐。我现在几乎可以使用它,尽管现在它似乎正在将分号转换为“,”(引号/逗号/引号)。例如,它将 ".navDate a {color:#9e9e9e; text-decoration:none;}" 转换为 ".navDate a {color:#9e9e9e"," text-decoration:none","}"
猜你喜欢
  • 2017-07-18
  • 2015-06-06
  • 2014-03-03
  • 1970-01-01
  • 2021-11-14
  • 2015-10-07
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
相关资源
最近更新 更多