有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当我从Excel工作表中读取inf时,无法按顺序打印文档文件中的信息

文档中的输出格式应如下所示:

Document Output

这是excel工作表的输入格式:

Excel Output

我试图阅读Excel表格,并试图在Word文档中按系统顺序打印信息。我可以读取Excel工作表,但无法在文档文件中打印。我该怎么办

它显示Excel文件的最后一行,也就是说,它只是覆盖了文档文件,但没有附加它。有没有办法附加这个文件

public static void main(String[] args) throws Exception {
    File src = new File("convertion java.xls");
    FileInputStream fis = new FileInputStream(src);
    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet sheet1 = wb.getSheetAt(0);
    String[] header = new String[4];
    for (int k = 0; k < 4; k++) {
        header[k] = sheet1.getRow(0).getCell(k).getStringCellValue();
    }
    FileOutputStream out = new FileOutputStream(new File("output.docx"));
    for (int j = 1; j < 5; j++) {

        for (int i = 0; i < 4; i++) {

            result = sheet1.getRow(j).getCell(i).getStringCellValue();
            doc = header[i] + " = " + result;
            System.out.println(doc);
            XWPFDocument document = new XWPFDocument();
            XWPFParagraph paragraph = document.createParagraph();
            XWPFRun paragraphOneRunOne = paragraph.createRun();
            paragraphOneRunOne.setText(doc);
            document.write(out);
        }
        System.out.println();
    }
    wb.close();
    out.close();
}}  

我希望输出会附加doc文件,但不会重写它


共 (1) 个答案

  1. # 1 楼答案

    Excel工作表中的每个单元格创建一个新的XWPFDocument。这不会导致你想要的结果。要获得想要的结果,只需要一个XWPFDocument,然后根据找到的Excel单元格的内容用段落填充

    对于Excel部分,您应该使用org.apache.poi.ss.usermodel.*而不是HSSF,因为这是更一般的,并且也可以读取XSSF*.xlsx

    而且您不应该依赖于getStringCellValue,因为并非所有Excel单元格内容都必须始终是文本。相反,您应该使用DataFormatterExcel单元格获取单元格内容

    完整示例:

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xwpf.usermodel.*;
    
    class ReadExcelWriteWord {
    
     public static void main(String[] args) throws Exception {
    
      DataFormatter formatter = new DataFormatter();
    
      Workbook workbook = WorkbookFactory.create(new FileInputStream("convertion java.xls"));
      FileOutputStream out = new FileOutputStream("output.docx");
      XWPFDocument document = new XWPFDocument();
    
      Sheet sheet = workbook.getSheetAt(0);
      Row row = null;
      Cell cell = null;
      XWPFParagraph paragraph = null;
      XWPFRun run = null;
    
      String[] header = new String[4];
      row = sheet.getRow(0);
      if (row != null) {
       for (int k = 0; k < 4; k++) {
        cell = row.getCell(k);
        header[k] = formatter.formatCellValue(cell);
       }
      }
    
      String result = "";
      String doc = "";
      for (int j = 1; j < 5; j++) {
       row = sheet.getRow(j);
       if (row != null) {
        for (int i = 0; i < 4; i++) {
         cell = row.getCell(i);
         result = formatter.formatCellValue(cell);
         doc = header[i] + " = " + result;
         System.out.println(doc);
         paragraph = document.createParagraph();
         run = paragraph.createRun();
         run.setText(doc);
        }
       }
       paragraph = document.createParagraph();
       System.out.println();
      }
    
      workbook.close();
      document.write(out);
      out.close();
      document.close();
     }
    }