是否有一种从List <pojo>生成Excel电子表格的优雅方法? (JAVA)</POJO>

时间:2010-07-16 16:54:34

标签: java excel

在java中,是否有一种从List生成Excel电子表格的优雅方法?

4 个答案:

答案 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);