如何在 Apache Camel 中创建 Excel (.xlsx) 文件?
How to create an Excel (.xlsx) file in Apache Camel?
我正在尝试创建一个 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 ...
然后我在路线中转换 IexPersons 列表:
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 文件并将其发送到另一个位置。我没能让它发挥作用。
我在互联网上没有找到任何对我有帮助的东西。
我通常使用 XSL 转换 在 Microsoft Office XML format.
中创建 Excel 个文件
您可以在链接的维基百科页面上找到 Excel 电子表格的示例 XML。
但是,我通常会创建一个简单的 Excel 文件来表示我想要的内容,然后我 将其另存为“XML电子表格 2003".
结果是我需要使用 XSL 样式表生成 的XML 文件结构。
在此处发帖供以后需要同一主题帮助的用户使用。
我能够使用 Apache POI 库将 Java 对象转换为可用的 excel 文件。
我创建了一个服务,并在其中创建了一个将对象转换为文件的方法,我从我的 Camel 路由中调用了该方法。这很好解释here。
代码如下:
// 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();
}
我正在尝试创建一个 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 ...
然后我在路线中转换 IexPersons 列表:
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 文件并将其发送到另一个位置。我没能让它发挥作用。 我在互联网上没有找到任何对我有帮助的东西。
我通常使用 XSL 转换 在 Microsoft Office XML format.
中创建 Excel 个文件您可以在链接的维基百科页面上找到 Excel 电子表格的示例 XML。
但是,我通常会创建一个简单的 Excel 文件来表示我想要的内容,然后我 将其另存为“XML电子表格 2003".
结果是我需要使用 XSL 样式表生成 的XML 文件结构。
在此处发帖供以后需要同一主题帮助的用户使用。 我能够使用 Apache POI 库将 Java 对象转换为可用的 excel 文件。
我创建了一个服务,并在其中创建了一个将对象转换为文件的方法,我从我的 Camel 路由中调用了该方法。这很好解释here。
代码如下:
// 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();
}