java - 在java中生成excel表格报告

标签 java eclipse excel sqlyog

我想生成 Excel 报告,但无法生成 Excel 报告,我不知道问题出在哪里?

每次单击“生成报告”按钮时,我都需要生成自动报告。 我正在使用 sqlyog,我的表名称是最终名称,我的数据库名称是等。我的数据库表条目不是静态的,因此我需要一份自动报告。

我正在使用 Eclipse IDE 我是否需要使用更多的外部 api。

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelDatabase {
public static void main(String[] args) throws Exception {
    Class.forName("com.mysql.jdbc.Driver");
    Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/etc", "root", "");

    Statement statement = connect.createStatement();
    ResultSet resultSet = statement.executeQuery("select * from final");
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet spreadsheet = workbook.createSheet("engine report");
    HSSFRow row = spreadsheet.createRow(1);
    HSSFCell cell;
    cell = row.createCell(1);
    cell.setCellValue("engine_code");
    cell = row.createCell(2);
    cell.setCellValue("var1");
    cell = row.createCell(3);
    cell.setCellValue("var2");
    cell = row.createCell(4);
    cell.setCellValue("var3");
    cell = row.createCell(5);
    cell.setCellValue("var4");
    cell = row.createCell(6);
    cell.setCellValue("var5");
    cell = row.createCell(7);
    cell.setCellValue("User_Name");
    cell = row.createCell(8);
    cell.setCellValue("time_stamp");
    int i = 2;
    while (resultSet.next()) {
        row = spreadsheet.createRow(i);
        cell = row.createCell(1);
        cell.setCellValue(resultSet.getInt("ec"));
        cell = row.createCell(2);
        cell.setCellValue(resultSet.getString("v1"));
        cell = row.createCell(3);
        cell.setCellValue(resultSet.getString("v2"));
        cell = row.createCell(4);
        cell.setCellValue(resultSet.getString("v3"));
        cell = row.createCell(5);
        cell.setCellValue(resultSet.getString("v4"));
        cell = row.createCell(6);
        cell.setCellValue(resultSet.getString("v5"));
        cell = row.createCell(7);
        cell.setCellValue(resultSet.getString("user"));
        cell = row.createCell(8);
        cell.setCellValue(resultSet.getString("time"));
        i++;
    }
    FileOutputStream out = new FileOutputStream(new File("exceldatabase.xls"));
    workbook.write(out);
    out.close();
    System.out.println("exceldatabase.xls written successfully");
 }
}

最佳答案

我在数据库中创建了与您相同的表并尝试运行您的代码。 我可以创建 Excel 文件而无需更改您的代码。 唯一的区别是我使用了不同的驱动程序(“oracle.jdbc.driver.OracleDriver”)。因此,首先检查您的数据库连接。如果成功,那么其余代码应该可以正常工作。
如果有的话,请发布更具体的异常(exception)情况。 这将有助于解决问题。 还有一件事,您使用了从第 1 行和单元格 1 开始的索引,但 POI 使用从 0 开始的行和列索引。

读取Excel文件并生成报告如下

您可以读取 Excel 中的所有行和列并将其显示在您的 UI 中。

    FileInputStream file = new FileInputStream("exceldatabase.xls");
    Workbook wb = new HSSFWorkbook(file);
    Sheet sheet = wb.getSheet("engine report");
    int lastRowNum = sheet.getLastRowNum();
    for(int rowIndex = 0 ; rowIndex < lastRowNum ; rowIndex++){
        Row currRow = sheet.getRow(rowIndex);
        if(currRow != null) {
            List<String> currRowValues = new ArrayList<String>();
            for(int cellNo = currRow.getFirstCellNum(); cellNo < currRow.getLastCellNum();cellNo++) {
                Cell currCell = currRow.getCell(cellNo);

                if(currCell != null) {
                    int cellType = currCell.getCellType();
                    switch(cellType) {
                        case Cell.CELL_TYPE_BLANK :
                            currRowValues.add("");
                        break;
                        case Cell.CELL_TYPE_BOOLEAN :
                            currRowValues.add(String.valueOf(currCell.getBooleanCellValue()));
                        break;
                        case Cell.CELL_TYPE_NUMERIC :
                            currRowValues.add(String.valueOf(currCell.getNumericCellValue()));
                        break;
                        case Cell.CELL_TYPE_STRING :
                            currRowValues.add(currCell.getStringCellValue());
                        break;
                        case Cell.CELL_TYPE_ERROR :
                            currRowValues.add("");
                        break;

                    }
                } else {
                    currRowValues.add("");
                }

            }

            // Add your code here 
            // Add current list to your UI or the way you want to display report
                System.out.println( currRowValues);
        }
    } 

要在 Excel 文件中添加标题,请使用以下代码。

您应该在工作表中创建一个合并区域。

您可以使用 CellRangeAddress 提供要合并的范围。它以 startRow、endRow、startCol、endCol 作为值来创建单元格范围地址。

创建合并区域后,您应该在区域最左侧的单元格(即 startRow、startCol 处的单元格)中设置值。

我使用对齐方式将内容居中对齐。

保存您的文件,您将获得预期的结果。 :)

    HSSFRow createRow = spreadsheet.createRow(0);
    CellRangeAddress range = new CellRangeAddress(0, 0, 1, 8);
    spreadsheet.addMergedRegion(range);
    HSSFCell createCell = createRow.createCell(1);
    createCell.setCellValue("My header");//ADD Your Custom Header value Here 
    CellUtil.setAlignment(createCell, workbook, CellStyle.ALIGN_CENTER);

关于java - 在java中生成excel表格报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966690/

相关文章:

java - java 数组上出现 NullPointerException,已创建新对象

java - 构建路径上的冲突文件

java - 在两个链接表(通过 fk 链接)的第二个表中创建行不起作用

java - 导出后 Java Eclipse 项目出现问题

vba - 查找列中的重复项并使用替代颜色突出显示行背景色

java - 子类的 JNI FindClass 格式?

java - 使用应用程序类来存储数据

delphi - 如何将行追加到 Excel 工作表?

vba - 定义工作表名称取决于变量

java - 如何删除arraylist java中的重复数据