我正在尝试创建一个“XLS”文件,但它将以 txt 文件的形式提供。 (这意味着当您右键单击并选择在窗口中打开并选择记事本时,它将显示为制表符分隔的文本文件。)
这是我要创建的示例文件(我必须删除一些条目,因为它很大)。当你用notepad++打开文件,选择编码为UTF-8时,你会看到如下图的“隐藏字符”:
如果你能看到 xA0,它是由 IBM I 系列 (AS400) 的 COBOL 程序生成的隐藏字符之一。
不过,如果你看到那些黄色高亮部分,那也是AS400的一个特点。声明如下:
DCL VAR(&FLDDLM) TYPE(*CHAR) LEN(1) VALUE(X'05')
现在我可以用下面这些测试代码生成 xA0:
List<Object[]> data = new ArrayList<>();
data.add(new Object[] { "AS1", "185914", "NETHERLANDS", "NL", "", "202023714", "2023714", "27-AUG-2022",
"03-FEB-2023", "", "", "00000000", "IF-ADAMAS", "", "PTF166091NL00",
"P166091NL00", "", "", "", "", "IF ADAMAS B V" });
data.add(new Object[] { "AS1", "20200893", "GERMANY", "DE", "", "13801864.3", "2915188",
"05-NOV-2022", "22-FEB-2023", "R80049", "10", "00000434", "MICRONIT M", "",
"PTF124241DEEP", "P118354DEEP", "", "", "", "",
"MICRONIT MICROFLUIDICS B.V." });
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.XLS"),"windows-1252");
writer.write(
"\"Client\"\t\"Case Number\"\t\"Country\"\t\"WIPO\"\t\"Subcase\"\t\"Application Number\"\t\"Patent Number\"\t\"Due Date\"\t\"Paid Date\"\t\"Invoice Number\"\t\"Annuity Number\"\t\"Invoice Amount\"\t\"Client/Division\"\t\"Client Ref(Inv)\"\t\"Client Ref#1(Ctry)\"\t\"Client Ref#2(Ctry)\"\t\"Attorney(Inv)\"\t\"Attorney(Ctry)\"\t\"Remarks\"\t\"Local Title\"\t\"Title Holder\"\n");
for (Object[] row : data) {
for (int i = 0; i < row.length; i++) {
writer.write("\"" + "\u00a0" + row[i].toString() + "\"");
if (i < row.length - 1) {
writer.write("\t");
}
}
writer.write("\n");
}
writer.close();
System.out.println("Done");
}
我必须在
"windows-1252"
中输入 FileOutputStream("output.XLS"),"windows-1252");
以生成带有 xA0
的 "\u00a0"
,就像您在上图中看到的那样。然而,
DCL VAR(&FLDDLM) 类型(*字符) LEN(1) 值(X'05')
我在
里放了
"\u0005"
而不是简单的
"\t"
if (i < row.length - 1) {
writer.write("\t");
}
它给了我
ENQ
喜欢下面的这张照片
那不是我想要达到的。我想像第一张图片那样实现。 因此,有人能告诉我什么是
X'05'
字段分隔符吗?我应该改变什么?
有人可以帮我吗?
我将不胜感激!