(1)WritableWorkbook
WritableWorkbook是jxl库中的一个Java工具类,用于创建和修改Excel文件。它提供了一组方法来操作Excel工作簿,包括创建工作表、写入数据、设置格式等。
使用WritableWorkbook,你可以执行以下操作:
-
创建工作簿:使用
Workbook.createWorkbook(File file)
方法创建一个新的工作簿对象,并指定要保存的文件路径。 -
创建工作表:使用
WritableWorkbook.createSheet(String sheetName, int sheetIndex)
方法在工作簿中创建一个新的工作表。可以通过sheetName指定工作表的名称,sheetIndex指定工作表的索引位置。 -
写入数据:使用
WritableSheet.addCell(Cell cell)
方法将单元格添加到工作表中。可以创建不同类型的单元格,例如Label、Number、Date等,并将其添加到工作表中。 -
设置格式:使用
WritableCellFormat
类可以设置单元格的格式,如字体、颜色、边框等。可以通过cell.setCellFormat(WritableCellFormat format)
方法将格式应用到单元格上。 -
保存工作簿:使用
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
的方法:
-
setAlignment(Alignment alignment)
:设置单元格内容的对齐方式,如左对齐、右对齐、居中对齐等。 -
setBackground(Colour colour)
:设置单元格的背景颜色。 -
setBorder(Border border, BorderLineStyle style)
:设置单元格的边框样式,包括边框类型和线条样式。 -
setFont(WritableFont font)
:设置单元格的字体样式,如字体名称、大小、加粗等。 -
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);
需要注意的是,以上示例中的column
和row
分别表示单元格的列索引和行索引,从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
方法再次创建了七个单元格对象,并将它们添加到行中。