Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种从列表生成Excel电子表格的优雅方法<;POJO>;?(爪哇)_Java_Excel - Fatal编程技术网

Java 是否有一种从列表生成Excel电子表格的优雅方法<;POJO>;?(爪哇)

Java 是否有一种从列表生成Excel电子表格的优雅方法<;POJO>;?(爪哇),java,excel,Java,Excel,在java中,是否有一种从列表生成Excel电子表格的优雅方法?有两种可能的完全不同的方法: 写一个CSV文件。这是逗号分隔的,您只需将字段(用逗号分隔)写入扩展名为.csv的文件中。Excel可以很好地理解这一点,而且非常简单 使用一个库来编写格式完美、与Office兼容的Excel文件(Excel 95,2003,…各种标准)。这需要更多的工作 正如前面的答案所示,CSV是一种简单的方法,但Excel有推断数据类型的习惯-例如,如果字符串看起来像一个数字,它将被格式化为一个数字,即使您使用

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

有两种可能的完全不同的方法:

  • 写一个CSV文件。这是逗号分隔的,您只需将字段(用逗号分隔)写入扩展名为.csv的文件中。Excel可以很好地理解这一点,而且非常简单

  • 使用一个库来编写格式完美、与Office兼容的Excel文件(Excel 95,2003,…各种标准)。这需要更多的工作


正如前面的答案所示,CSV是一种简单的方法,但Excel有推断数据类型的习惯-例如,如果字符串看起来像一个数字,它将被格式化为一个数字,即使您使用双引号引用它。如果您想要更多的控制,您可以尝试生成excelxml,在您的例子中可能使用一个模板,并生成一个看起来有点像HTML表的表。查看一个简单的示例。

您可以尝试

公共类播放器{
@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);