Java中如何将管道符号分隔的txt文件转换为xls文件
我需要将csv文件中的数据输入selenium中的excel 具有如下格式的csv文件:Java中如何将管道符号分隔的txt文件转换为xls文件,java,excel,csv,Java,Excel,Csv,我需要将csv文件中的数据输入selenium中的excel 具有如下格式的csv文件: PERIOD|EMPLID|EMPL_RCD|HOME HOST|NAME|FIRST_NAME|LAST_NAME|FTE|EMPL_STATUS 5/04/2018|78787|0|Home|mandon|steven|jabobs|1|A 6/04/2018|78789|0|Home|stacy|carvin|tans|1|A 11/04/2018|17892|0|Home|neel|harvis|b
PERIOD|EMPLID|EMPL_RCD|HOME HOST|NAME|FIRST_NAME|LAST_NAME|FTE|EMPL_STATUS
5/04/2018|78787|0|Home|mandon|steven|jabobs|1|A
6/04/2018|78789|0|Home|stacy|carvin|tans|1|A
11/04/2018|17892|0|Home|neel|harvis|bammer|1|A
需要在excel中显示此数据,如图所示:
编辑我创建Excel文件的尝试
我使用下面的代码从带有管道符号分隔符的csv文件生成.xls文件,如图所示
但是is在阅读第一行之后给出了java.lang.NullPointerException
public class DelimitedToXls {
@SuppressWarnings("deprecation")
public static void main(String args[]) throws IOException {
ArrayList<ArrayList<String>> allRowAndColData = null;
ArrayList<String> oneRowData = null;
String fName = "C:\\input.csv";
String currentLine;
FileInputStream fis = new FileInputStream(fName);
DataInputStream myInput = new DataInputStream(fis);
int i = 0;
allRowAndColData = new ArrayList<ArrayList<String>>();
while ((currentLine = myInput.readLine()) != null) {
oneRowData = new ArrayList<String>();
String oneRowArray[] = currentLine.split(";");
for (int j = 0; j < oneRowArray.length; j++) {
oneRowData.add(oneRowArray[j]);
}
allRowAndColData.add(oneRowData);
System.out.println();
i++;
}
try {
HSSFWorkbook workBook = new HSSFWorkbook();
HSSFSheet sheet = workBook.createSheet("sheet1");
for (int i = 0; i < allRowAndColData.size(); i++) {
ArrayList<?> ardata = (ArrayList<?>) allRowAndColData.get(i);
HSSFRow row = sheet.createRow((short) 0 + i);
for (int k = 0; k < ardata.size(); k++) {
System.out.print(ardata.get(k));
HSSFCell cell = row.createCell((short) k);
cell.setCellValue(ardata.get(k).toString());
}
System.out.println();
}
FileOutputStream fileOutputStream = new FileOutputStream("C:\\outputFile.xls");
workBook.write(fileOutputStream);
fileOutputStream.close();
} catch (Exception ex) {
}
}
}
您有3个主要选项: 直接用Excel打开,并将分隔符设置为| pipe 将其重写为有效的CSV逗号分隔值文件,即用逗号替换管道 将文件内容写入适当的Excel文件。 选项1-直接用Excel打开 见法布里齐奥的答案 选项2-将其重写为有效的CSV文件 如果确定文件中没有逗号 您只需将所有出现的|替换为,即可获得有效的csv逗号分隔值文件。然后你可以用Excel打开它
String fileName = "/path/to/your/file/textFile.txt";
String csvFileName = "/path/to/your/file/csvFile.csv";
try (BufferedReader br = new BufferedReader(new FileReader(fileName));
Writer writer = new FileWriter(csvFileName)) {
String line;
while ((line = br.readLine()) != null) {
writer.append(line.replaceAll("[|]", ","));
writer.append("\n");
}
} catch(Exception e) {
e.printStackTrace();
}
此代码将文件的内容更改为
PERIOD,EMPLID,EMPL_RCD,HOME HOST,NAME,FIRST_NAME,LAST_NAME,FTE,EMPL_STATUS
5/04/2018,78787,0,Home,mandon,steven,jabobs,1,A
6/04/2018,78789,0,Home,stacy,carvin,tans,1,A
11/04/2018,17892,0,Home,neel,harvis,bammer,1,A
如果文件中可能有逗号
您需要逐个令牌读取令牌,并将包含逗号的令牌用双引号括起来。然后用逗号替换所有管道。例如,这一行
5/04/2018|78787|0|Home, Work|mandon|steven|jabobs|1|A
将转变为
5/04/2018,78787,0,"Home, Work",mandon,steven,jabobs,1,A
您可以这样做:
String fileName = "/path/to/your/file/textFile.txt";
String csvFileName = "/path/to/your/file/csvFile.csv";
try (BufferedReader br = new BufferedReader(new FileReader(fileName));
Writer writer = new FileWriter(csvFileName)) {
String line;
while ((line = br.readLine()) != null) {
String csvLine = Arrays.stream(line.split("[|]")) // split on pipes
.map(token -> token.contains(",") ? "\""+token+"\"" : token) // surround with double quotes if there is a comma in the value
.collect(Collectors.joining(",", "", "\n")); // join with commas
writer.append(csvLine);
}
} catch(Exception e) {
e.printStackTrace();
}
选项3-写入Excel文件
您还可以使用该库创建适当的Excel文件.xls或.xlsx。下面是一个使用POI-OOXML 3.17最新版本的示例
您有3个主要选项: 直接用Excel打开,并将分隔符设置为| pipe 将其重写为有效的CSV逗号分隔值文件,即用逗号替换管道 将文件内容写入适当的Excel文件。 选项1-直接用Excel打开 见法布里齐奥的答案 选项2-将其重写为有效的CSV文件 如果确定文件中没有逗号 您只需将所有出现的|替换为,即可获得有效的csv逗号分隔值文件。然后你可以用Excel打开它
String fileName = "/path/to/your/file/textFile.txt";
String csvFileName = "/path/to/your/file/csvFile.csv";
try (BufferedReader br = new BufferedReader(new FileReader(fileName));
Writer writer = new FileWriter(csvFileName)) {
String line;
while ((line = br.readLine()) != null) {
writer.append(line.replaceAll("[|]", ","));
writer.append("\n");
}
} catch(Exception e) {
e.printStackTrace();
}
此代码将文件的内容更改为
PERIOD,EMPLID,EMPL_RCD,HOME HOST,NAME,FIRST_NAME,LAST_NAME,FTE,EMPL_STATUS
5/04/2018,78787,0,Home,mandon,steven,jabobs,1,A
6/04/2018,78789,0,Home,stacy,carvin,tans,1,A
11/04/2018,17892,0,Home,neel,harvis,bammer,1,A
如果文件中可能有逗号
您需要逐个令牌读取令牌,并将包含逗号的令牌用双引号括起来。然后用逗号替换所有管道。例如,这一行
5/04/2018|78787|0|Home, Work|mandon|steven|jabobs|1|A
将转变为
5/04/2018,78787,0,"Home, Work",mandon,steven,jabobs,1,A
您可以这样做:
String fileName = "/path/to/your/file/textFile.txt";
String csvFileName = "/path/to/your/file/csvFile.csv";
try (BufferedReader br = new BufferedReader(new FileReader(fileName));
Writer writer = new FileWriter(csvFileName)) {
String line;
while ((line = br.readLine()) != null) {
String csvLine = Arrays.stream(line.split("[|]")) // split on pipes
.map(token -> token.contains(",") ? "\""+token+"\"" : token) // surround with double quotes if there is a comma in the value
.collect(Collectors.joining(",", "", "\n")); // join with commas
writer.append(csvLine);
}
} catch(Exception e) {
e.printStackTrace();
}
选项3-写入Excel文件
您还可以使用该库创建适当的Excel文件.xls或.xlsx。下面是一个使用POI-OOXML 3.17最新版本的示例
您可以使用excel直接打开该文件。打开文件->选择文件类型:文本文件。 选择文件,然后在下一个窗口中选择“分隔”选项。下一个窗口选择“其他”并键入|作为分隔符。 当然,将其另存为xls 就这些
您可以使用excel直接打开该文件。打开文件->选择文件类型:文本文件。 选择文件,然后在下一个窗口中选择“分隔”选项。下一个窗口选择“其他”并键入|作为分隔符。 当然,将其另存为xls 就这些 您可以将|替换为char\t并将其存储在.csv文件中。 我在将CSV转换为XLS时也做了类似的工作:
try{
FileReader fr=new FileReader("TEJAS.CSV");
FileWriter fw=new FileWriter("TEJASEXEL.xls");
while((c=fr.read())!=-1){
if(c==','){
c='\t';
}
fw.write(c);
}
fr.close();
fw.close();
}
您可以将|替换为char\t并将其存储在.csv文件中。
我在将CSV转换为XLS时也做了类似的工作:
try{
FileReader fr=new FileReader("TEJAS.CSV");
FileWriter fw=new FileWriter("TEJASEXEL.xls");
while((c=fr.read())!=-1){
if(c==','){
c='\t';
}
fw.write(c);
}
fr.close();
fw.close();
}
您只需要用逗号替换管道,然后就可以用excel打开它,这与Selenium有什么关系?我遗漏了什么吗?谢谢德班詹的投入。实际上,我能够读取csv文件,但我需要将这些数据放入excel,并进行适当的映射,如第一行应为headerPERIOD EMPLID,后续行应为与每列映射的值,如图所示,这需要代码的帮助,而不是直接在excel中打开文本文件。您只需要用逗号替换管道,然后用excel打开,这与Selenium有什么关系?我遗漏了什么吗?谢谢德班詹的投入。实际上,我能够读取csv文件,但我需要将这些数据放入excel,并进行适当的映射,如第一行应为headerPERIOD EMPLID,后续行应为与每列映射的值,如图所示,这需要代码的帮助,而不是直接在excel中打开文本文件。谢谢Bentaye用于输入。转换完成后,如何使用上图所示的代码在excel中获取它我不理解您的问题,一旦用逗号分隔,您只需用excel打开即可。还是要生成正确的Excel文件.xls?如果是这样,则需要使用POI之类的库。我可以为它添加一些代码。@I当然可以,我今天几小时后上班时会添加。这也是一段简短的代码。非常感谢。@I希望我用Excel版本更新了我的答案。请看一看谢谢Bentaye的输入。转换后如何在exc中获取它
el在上图所示代码的帮助下,我不理解您的问题,一旦用逗号分隔,您只需用excel打开即可。还是要生成正确的Excel文件.xls?如果是这样,则需要使用POI之类的库。我可以为它添加一些代码。@I当然可以,我今天几小时后上班时会添加。这也是一段简短的代码。非常感谢。@I希望我用Excel版本更新了我的答案。请看一看事实上我必须用脚本而不是手工来做这件事。@FabrizioR我在我的答案中引用了你的答案,我希望你同意。事实上我必须用脚本而不是手工来做这件事。@FabrizioR我在我的答案中引用了你的答案,我希望你同意。