java处理excel

(1)WritableWorkbook

WritableWorkbook是jxl库中的一个Java工具类,用于创建和修改Excel文件。它提供了一组方法来操作Excel工作簿,包括创建工作表、写入数据、设置格式等。

使用WritableWorkbook,你可以执行以下操作:

  1. 创建工作簿:使用Workbook.createWorkbook(File file)方法创建一个新的工作簿对象,并指定要保存的文件路径。

  2. 创建工作表:使用WritableWorkbook.createSheet(String sheetName, int sheetIndex)方法在工作簿中创建一个新的工作表。可以通过sheetName指定工作表的名称,sheetIndex指定工作表的索引位置。

  3. 写入数据:使用WritableSheet.addCell(Cell cell)方法将单元格添加到工作表中。可以创建不同类型的单元格,例如Label、Number、Date等,并将其添加到工作表中。

  4. 设置格式:使用WritableCellFormat类可以设置单元格的格式,如字体、颜色、边框等。可以通过cell.setCellFormat(WritableCellFormat format)方法将格式应用到单元格上。

  5. 保存工作簿:使用WritableWorkbook.write()方法将工作簿中的数据写入到文件中。同时,可以使用WritableWorkbook.close()方法关闭工作簿。

下面是一个简单的示例代码,演示了如何使用WritableWorkbook创建一个Excel文件并写入数据:

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class ExcelWriter {
    public static void main(String[] args) {
        try {
            // 创建工作簿
            WritableWorkbook workbook = Workbook.createWorkbook(new File("example.xls"));
            
            // 创建工作表
            WritableSheet sheet = workbook.createSheet("Sheet1", 0);
            
            // 写入数据
            Label label = new Label(0, 0, "Hello");
            sheet.addCell(label);
            
            // 保存工作簿并关闭
            workbook.write();
            workbook.close();
            
            System.out.println("Excel文件创建成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码创建了一个名为"example.xls"的Excel文件,并在第一个工作表中写入了一个单元格,内容为"Hello"。通过调用workbook.write()方法将数据写入文件,并通过workbook.close()方法关闭工作簿。

需要注意的是,WritableWorkbook类属于jxl库,该库已经停止维护,不再推荐使用。推荐使用Apache POI库来操作Excel文件,它提供了更强大和灵活的功能

(2)WritableCellFormat

WritableCellFormat是jxl库中的一个Java类,用于设置单元格的格式。通过使用WritableCellFormat,你可以自定义单元格的字体、颜色、对齐方式、边框等样式。

下面是一些常用的WritableCellFormat的方法:

  1. setAlignment(Alignment alignment):设置单元格内容的对齐方式,如左对齐、右对齐、居中对齐等。

  2. setBackground(Colour colour):设置单元格的背景颜色。

  3. setBorder(Border border, BorderLineStyle style):设置单元格的边框样式,包括边框类型和线条样式。

  4. setFont(WritableFont font):设置单元格的字体样式,如字体名称、大小、加粗等。

  5. setFormat(CellFormat format):设置单元格的格式,可以是预定义的格式或自定义的格式。

下面是一个示例代码,演示了如何使用WritableCellFormat来设置单元格的格式:

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.Alignment;
import jxl.write.Border;
import jxl.write.BorderLineStyle;
import jxl.write.Colour;
import jxl.write.WritableFont;

public class ExcelWriter {
    public static void main(String[] args) {
        try {
            // 创建工作簿
            WritableWorkbook workbook = Workbook.createWorkbook(new File("example.xls"));
            
            // 创建工作表
            WritableSheet sheet = workbook.createSheet("Sheet1", 0);
            
            // 创建单元格格式
            WritableFont font = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD);
            WritableCellFormat format = new WritableCellFormat(font);
            format.setAlignment(Alignment.CENTRE);
            format.setBackground(Colour.YELLOW);
            format.setBorder(Border.ALL, BorderLineStyle.THIN);
            
            // 写入数据
            Label label = new Label(0, 0, "Hello", format);
            sheet.addCell(label);
            
            // 保存工作簿并关闭
            workbook.write();
            workbook.close();
            
            System.out.println("Excel文件创建成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们首先创建了一个WritableFont对象来定义单元格的字体样式。然后,我们创建了一个WritableCellFormat对象,并使用该对象设置了对齐方式、背景颜色、边框样式和字体样式。最后,我们将这个格式应用到单元格上。

需要注意的是,WritableCellFormat类同样属于jxl库,该库已经停止维护,不再推荐使用。推荐使用Apache POI库来操作Excel文件,它提供了更强大和灵活的功能。

(3)使用WritableSheet.addCell(Cell cell)方法可以将不同类型的单元格添加到工作表中。

        1.Label(文本单元格):用于显示文本内容。

Label label = new Label(column, row, "Text");
sheet.addCell(label);

        2.Number(数字单元格):用于显示数值。

Number number = new Number(column, row, 123.45);
sheet.addCell(number);

        3.DateTime(日期时间单元格):用于显示日期和时间。

DateTime dateTime = new DateTime(column, row, new Date());
sheet.addCell(dateTime);

        4.Formula(公式单元格):用于计算公式结果。

Formula formula = new Formula(column, row, "=A1+B1");
sheet.addCell(formula);

        5.Boolean(布尔单元格):用于显示布尔值(true或false)。

Boolean bool = new Boolean(column, row, true);
sheet.addCell(bool);

        6.Empty(空单元格):用于占位,没有任何内容。

Boolean bool = new Boolean(column, row, true);
sheet.addCell(bool);

需要注意的是,以上示例中的columnrow分别表示单元格的列索引和行索引,从0开始计数。

另外,通过设置单元格的格式,可以对单元格进行更多的定制。例如,可以使用WritableCellFormat来设置字体、颜色、对齐方式等单元格样式,然后将格式应用到相应的单元格上。示例代码如下:

WritableCellFormat format = new WritableCellFormat();
format.setFont(new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD));
format.setAlignment(Alignment.CENTRE);
format.setBackground(Colour.YELLOW);

Label label = new Label(column, row, "Text", format);
sheet.addCell(label);

上述代码中,我们创建了一个WritableCellFormat对象,并设置了字体、对齐方式和背景颜色。然后,我们创建一个Label单元格,并将格式应用到该单元格上。

需要注意的是,WritableSheet.addCell(Cell cell)方法可以在工作表的任意位置添加单元格,如果指定的位置已经存在单元格,则会覆盖原有单元格的内容。

(4)poi

问题:根据Apache POI,我现在做一个功能,查询数据库得到一个List<Student> list集合,包含id,name,number,age,address,phone,sex这些属性,一共20条。现在创建一个文件夹,使用poi把这些数据存到一个excel里,把这个excel文件存到这个文件夹里。返回给前端这个文件名和文件路径

下面是一个简单的示例代码,用于将从数据库查询得到的学生列表存储到Excel文件中,并返回文件名和路径。

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class StudentExcelExporter {
    public static final String FILE_DIRECTORY = "C:/example/"; // 文件夹路径

    public static String export(List<Student> studentList) throws Exception {
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();

        // 创建工作表
        Sheet sheet = workbook.createSheet("Student");

        // 创建表头行
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("ID");
        headerRow.createCell(1).setCellValue("Name");
        headerRow.createCell(2).setCellValue("Number");
        headerRow.createCell(3).setCellValue("Age");
        headerRow.createCell(4).setCellValue("Address");
        headerRow.createCell(5).setCellValue("Phone");
        headerRow.createCell(6).setCellValue("Sex");

        // 填充数据
        int rowNum = 1;
        for (Student student : studentList) {
            Row row = sheet.createRow(rowNum++);
            row.createCell(0).setCellValue(student.getId());
            row.createCell(1).setCellValue(student.getName());
            row.createCell(2).setCellValue(student.getNumber());
            row.createCell(3).setCellValue(student.getAge());
            row.createCell(4).setCellValue(student.getAddress());
            row.createCell(5).setCellValue(student.getPhone());
            row.createCell(6).setCellValue(student.getSex());
        }

        // 生成文件名
        String fileName = "Student_" + System.currentTimeMillis() + ".xlsx";

        // 创建文件夹
        File directory = new File(FILE_DIRECTORY);
        if (!directory.exists()) {
            directory.mkdirs();
        }

        // 保存文件
        String filePath = FILE_DIRECTORY + fileName;
        FileOutputStream fileOut = new FileOutputStream(filePath);
        workbook.write(fileOut);
        fileOut.close();
        workbook.close();

        return fileName + "," + filePath; // 返回文件名和路径,用逗号分隔
    }
}

在上述示例中,我们首先创建了一个工作簿和一个工作表,并创建了表头行。然后,我们遍历学生列表,创建新的行并填充数据。最后,我们生成一个唯一的文件名,创建文件夹(如果不存在),将工作簿写入到文件中,并返回文件名和路径。

你可以将这个代码片段集成到你的项目中,调用export方法即可将学生列表导出到Excel文件中。请注意,在实际应用中,你需要根据具体情况修改文件夹路径和表格列名等参数。

问题:没有把创建的cell添加到excel

// 创建行
Row row = sheet.createRow(rowIndex++);

// 创建单元格并填充数据
Cell idCell = row.createCell(0);
idCell.setCellValue(student.getId());

Cell nameCell = row.createCell(1);
nameCell.setCellValue(student.getName());

Cell numberCell = row.createCell(2);
numberCell.setCellValue(student.getNumber());

Cell ageCell = row.createCell(3);
ageCell.setCellValue(student.getAge());

Cell addressCell = row.createCell(4);
addressCell.setCellValue(student.getAddress());

Cell phoneCell = row.createCell(5);
phoneCell.setCellValue(student.getPhone());

Cell sexCell = row.createCell(6);
sexCell.setCellValue(student.getSex());

// 将单元格添加到行中
row.createCell(0).setCellValue(student.getId());
row.createCell(1).setCellValue(student.getName());
row.createCell(2).setCellValue(student.getNumber());
row.createCell(3).setCellValue(student.getAge());
row.createCell(4).setCellValue(student.getAddress());
row.createCell(5).setCellValue(student.getPhone());
row.createCell(6).setCellValue(student.getSex());

在上述代码中,我们首先创建了一个行对象,然后创建了七个单元格对象,并使用setCellValue方法填充了数据。接着,我们使用createCell方法再次创建了七个单元格对象,并将它们添加到行中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值