在java中,是否有一种从List生成Excel电子表格的优雅方法?
答案 0 :(得分:2)
有两种可能的,完全不同的方法:
写一个CSV文件。这是以逗号分隔的,您只需将逗号分隔的字段写入扩展名为.csv的文件中。 Excel可以读得很好,而且非常简单。
使用库Apache/Jakarta POI编写完全格式化的Office兼容Excel文件(Excel 95,2003,......各种标准)。这需要更多的工作。
答案 1 :(得分:1)
正如之前的回答所示,CSV是一种简单的方法,但Excel习惯于推断数据类型 - 例如,如果字符串看起来像数字,它将被格式化为数字,即使你有双引号。如果您想要更多控制,可以尝试生成Excel XML,在您的情况下可能正在使用模板,并生成一个看起来有点像HTML表的表。查看简单Excel XML document的示例。
答案 2 :(得分:0)
是。使用sep4j,您可以在使用HashMap定义标头后在一行中执行此操作。
Collection<User> users = Arrays.asList(user1, user2);
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("userId", "User Id"); //"userId" is a property of User class.
// "User Id" will be the column header in the excel.
headerMap.put("firstName", "First Name");
headerMap.put("lastName", "Last Name");
ExcelUtils.save(headerMap, users, outputStream);
答案 3 :(得分:0)
您可以尝试ssio
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);