Java 是否有一种从列表生成Excel电子表格的优雅方法<;POJO>;?(爪哇)
在java中,是否有一种从列表生成Excel电子表格的优雅方法?有两种可能的完全不同的方法:Java 是否有一种从列表生成Excel电子表格的优雅方法<;POJO>;?(爪哇),java,excel,Java,Excel,在java中,是否有一种从列表生成Excel电子表格的优雅方法?有两种可能的完全不同的方法: 写一个CSV文件。这是逗号分隔的,您只需将字段(用逗号分隔)写入扩展名为.csv的文件中。Excel可以很好地理解这一点,而且非常简单 使用一个库来编写格式完美、与Office兼容的Excel文件(Excel 95,2003,…各种标准)。这需要更多的工作 正如前面的答案所示,CSV是一种简单的方法,但Excel有推断数据类型的习惯-例如,如果字符串看起来像一个数字,它将被格式化为一个数字,即使您使用
- 写一个CSV文件。这是逗号分隔的,您只需将字段(用逗号分隔)写入扩展名为.csv的文件中。Excel可以很好地理解这一点,而且非常简单
- 使用一个库来编写格式完美、与Office兼容的Excel文件(Excel 95,2003,…各种标准)。这需要更多的工作
公共类播放器{
@SsColumn(索引=0,name=“Id”)
私人长id;
@SsColumn(index=1)//列名将被确定为“出生国”
私人字符串出生国;
@SsColumn(index=2,typeHandler=FullNameTypeHandler.class)//复杂的属性类型
私有全名;
@SsColumn(index=3)//将保存枚举的name()。否则,请使用typeHandler
私人SportType SportType;
@SsColumn(index=4,format=“yyyy/MM/dd”)//日期格式
私人本地日期出生日期;
@SsColumn(index=5,typeHandler=timestasmillishandler.class)
//如果您喜欢将时间戳保存为数字
私有LocalDateTime创建时间;
...
}
SaveParam SaveParam=
//类似Excel的文件。对于CSV,请使用“新建CsvSaveParamBuilder()
新建OfficeSaveParamBuilder()
.setBeanClass(Player.class)
.运动员
.setOutputTarget(输出流)
.build();
SsioManager SsioManager=SsioManagerFactory.newInstance();
SaveResult SaveResult=ssioManager.save(saveParam);
您必须定义优雅。您是否计划使用库?我认为JExcelAPI.CSV确实是一个不错的选择。您可以找到一些代码示例。尽管有一个广受欢迎且被接受的答案,但我认为Sualeh关于使用XML的建议也是一个好主意。从未想过CSV方法。谢谢。请注意,如果您写入CSV的数据可能包含逗号,请小心。CSV将读取文件中的每个逗号作为列分隔符。@Jon,如果字符串值被正确引用,数据中的逗号应该不会有问题。。。马克:你是对的,但是那样会开始一段悲伤的旅程。我们不能确定数据中是否也有引号,所以引号需要转义。。。这不是一个难题,而是一个烦恼。看起来像是对CSV的Excel方言的一个非常全面的描述,只是他们没有提到某些区域使用半角而不是逗号。@Carl可能会出现一条悲伤的线索,是的,你确实需要在CSV中转义你的引号,但这是大多数CSV库都遵守的标准(只要有标准的话)。。。
public class Player {
@SsColumn(index = 0, name = "Id")
private long id;
@SsColumn(index = 1) // the column name will be decided as "Birth Country"
private String birthCountry;
@SsColumn(index = 2, typeHandler = FullNameTypeHandler.class) //complex prop type
private FullName fullName;
@SsColumn(index = 3) //The enum's name() will be saved. Otherwise, use a typeHandler
private SportType sportType;
@SsColumn(index = 4, format = "yyyy/MM/dd") //date format
private LocalDate birthDate;
@SsColumn(index = 5, typeHandler = TimestampAsMillisHandler.class)
//if you prefer saving timestamp as number
private LocalDateTime createdWhen;
...
}
SaveParam<Player> saveParam =
//Excel-like file. For CSV, use "new CsvSaveParamBuilder()"
new OfficeSaveParamBuilder<Player>()
.setBeanClass(Player.class)
.setBeans(players)
.setOutputTarget(outputStream)
.build();
SsioManager ssioManager = SsioManagerFactory.newInstance();
SaveResult saveResult = ssioManager.save(saveParam);