Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中如何将管道符号分隔的txt文件转换为xls文件_Java_Excel_Csv - Fatal编程技术网

Java中如何将管道符号分隔的txt文件转换为xls文件

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

我需要将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|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我在我的答案中引用了你的答案,我希望你同意。