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

伊尚

我需要将 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) 文件,如图所示

图像

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打开,设置分隔符为|(竖线)
  • 将其重写为有效的 CSV(逗号分隔值)文件(即,用逗号替换管道)
  • 将文件内容写入适当的 Excel 文件。

选项 1 - 直接用 Excel 打开

见法布里齐奥的回答。

选项 2 - 将其重写为有效的 CSV 文件

如果您确定文件中没有逗号

您只需要替换所有出现的|by,即可获得有效的 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使用Apache POI库。这是一个使用POI-OOXML 3.17(截至今天的最新版本)的示例您可以从 Maven Repository 获取它

String fileName = "/path/to/your/file/textFile.txt";
String excelFileName = "/path/to/your/file/excelFile.xlsx";

// Create a Workbook and a sheet in it
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");

// Read your input file and make cells into the workbook
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
    String line;
    Row row;
    Cell cell;
    int rowIndex = 0;
    while ((line = br.readLine()) != null) {
        row = sheet.createRow(rowIndex);
        String[] tokens = line.split("[|]");
        for(int iToken = 0; iToken < tokens.length; iToken++) {
            cell = row.createCell(iToken);
            cell.setCellValue(tokens[iToken]);
        }
        rowIndex++;
    }
} catch(Exception e) {
    e.printStackTrace();
}

// Write your xlsx file
try (FileOutputStream outputStream = new FileOutputStream(excelFileName)) {
    workbook.write(outputStream);
    workbook.close();
} catch (IOException e) {
    e.printStackTrace();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章