如何在Apache Camel中创建Excel (.xlsx)文件?



我正在尝试创建一个Excel文件,并使用Apache Camel将其发送到SFTP位置。我可以像这样从Java对象创建一个PSV:

Java POJO:

@CsvRecord(separator = ",", skipFirstLine = true, generateHeaderColumns = true)
public class IexPerson implements Serializable {
private static final long serialVersionUID = 1234069326527342909L;
@DataField(pos = 1, columnName = "Person Name")
private String personName;
@DataField(pos = 2, columnName = "Gender")
private String gender;
// other fields ...

,然后转换路由中的iexperson列表:

DataFormat iexPersonFormat = new BindyCsvDataFormat(IexPerson.class);
from("direct-get-list-of-persons")
.setHeader(Exchange.FILE_NAME).simple("Persons_${date:now:yyyyMMdd-HHmmssSSS}_${random(1000,10000000)}.csv")
.marshal(iexPersonFormat)
.to("file:///tmp?fileName=${header.CamelFileName}");

这工作得很好,但现在我需要从相同的列表创建一个Excel文件,并将其发送到另一个位置。我没能让它工作。我在网上找不到任何能帮助我的东西。

在这里发布,以供将来需要相同主题帮助的用户使用。我能够通过使用Apache POI库将Java对象转换为可工作的excel文件。

我创建了一个服务,并在其中创建了一个将对象转换为文件的方法,我从Camel路由调用了该方法。

代码如下:

// Create a blank Workbook
try (Workbook workbook = new XSSFWorkbook()) {
// Create a blank Sheet
Sheet sheet = workbook.createSheet("IexPersons");
// column names
List <String> columns = new ArrayList<>();
columns.add("Person Name");
columns.add("Gender");
Row headerRow = sheet.createRow(0);
// Create columns/first row in a file
for (int i = 0; i < columns.size(); i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(columns.get(i));
}
int rowNum = 1;
// iterate over the list of persons and for each person write its values to the excel row
for (IexPerson iexPerson : getListOfPersons()) {
Row row = sheet.createRow(rowNum++);
// populate file with the values for each column
row.createCell(0).setCellValue(iexPerson.getName());
row.createCell(1).setCellValue(iexPerson.getGender());
}
// create file
FileOutputStream out = new FileOutputStream(new File("iexpersons.xlsx"));
// write data to file
workbook.write(out);
// close the output stream
out.close();
} catch (IOException e) {
e.printStackTrace();
}

我通常使用XSL转换Microsoft Office XML格式的Excel文件.

您可以在链接的维基百科页面上找到Excel电子表格的示例XML。

然而,我通常创建一个简单的Excel文件来表示我想要的然后我保存为"XML电子表格2003">.

结果是我需要生成的XML文件结构

最新更新