Недавно в проекте появилось требование экспортировать баллы в несколько листов Excel. Данные значений, такие как средние баллы и проценты, хранятся в числах с плавающей запятой, поэтому при отображении мы обычно сохраняем два десятичных знака после запятой.
Наши общие решения:
ROUND(X,D)
функция、FORMAT(X,D)
等функция;Таким образом, чтобы обеспечить максимальную совместимость и связанность, форматируйте аннотации непосредственно при экспорте.
EasyExcel — это быстрый и лаконичный инструмент обработки Excel на основе Java, который устраняет переполнение памяти больших файлов. Он позволяет быстро выполнять чтение, запись и другие функции Excel без учета производительности, памяти и других факторов.
официальный сайт:https://easyexcel.opensource.alibaba.com/
githubадрес:https://github.com/alibaba/easyexcel
giteeадрес:https://gitee.com/easyexcel/easyexcel
Экспорт демо-модели:
//пропуск......
@ExcelProperty(value = "язык", order = 1)
@ContentStyle(dataFormat = 2)
private Double yw;
@ExcelProperty(value = "математика", order = 2)
@ContentStyle(dataFormat = 2)
private Double sx;
@ContentStyleАннотация соответствуетdataFormat
=2 ,dataFormat этой аннотации предназначен для установки формата.,Его ценностьBuiltinFormats
в классе_formatsИндекс соответствующего формата в массиве,Исходный код выглядит следующим образом:
package org.apache.poi.ss.usermodel;
/**
* Utility to identify built-in formats. The following is a list of the formats as
* returned by this class.<p>
*<p>
* 0, "General"<br>
* 1, "0"<br>
* 2, "0.00"<br>
* 3, "#,##0"<br>
* 4, "#,##0.00"<br>
* 5, "$#,##0_);($#,##0)"<br>
* 6, "$#,##0_);[Red]($#,##0)"<br>
* 7, "$#,##0.00);($#,##0.00)"<br>
* 8, "$#,##0.00_);[Red]($#,##0.00)"<br>
* 9, "0%"<br>
* 0xa, "0.00%"<br>
* 0xb, "0.00E+00"<br>
* 0xc, "# ?/?"<br>
* 0xd, "# ??/??"<br>
* 0xe, "m/d/yy"<br>
* 0xf, "d-mmm-yy"<br>
* 0x10, "d-mmm"<br>
* 0x11, "mmm-yy"<br>
* 0x12, "h:mm AM/PM"<br>
* 0x13, "h:mm:ss AM/PM"<br>
* 0x14, "h:mm"<br>
* 0x15, "h:mm:ss"<br>
* 0x16, "m/d/yy h:mm"<br>
*<p>
* // 0x17 - 0x24 reserved for international and undocumented
* 0x25, "#,##0_);(#,##0)"<br>
* 0x26, "#,##0_);[Red](#,##0)"<br>
* 0x27, "#,##0.00_);(#,##0.00)"<br>
* 0x28, "#,##0.00_);[Red](#,##0.00)"<br>
* 0x29, "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)"<br>
* 0x2a, "_($* #,##0_);_($* (#,##0);_($* \"-\"_);_(@_)"<br>
* 0x2b, "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)"<br>
* 0x2c, "_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"<br>
* 0x2d, "mm:ss"<br>
* 0x2e, "[h]:mm:ss"<br>
* 0x2f, "mm:ss.0"<br>
* 0x30, "##0.0E+0"<br>
* 0x31, "@" - This is text format.<br>
* 0x31 "text" - Alias for "@"<br>
* <p>
*/
public final class BuiltinFormats {
/**
* The first user-defined number format starts at 164.
*/
public static final int FIRST_USER_DEFINED_FORMAT_INDEX = 164;
private final static String[] _formats = {
"General",
"0",
"0.00",
"#,##0",
"#,##0.00",
"\"$\"#,##0_);(\"$\"#,##0)",
"\"$\"#,##0_);[Red](\"$\"#,##0)",
"\"$\"#,##0.00_);(\"$\"#,##0.00)",
"\"$\"#,##0.00_);[Red](\"$\"#,##0.00)",
"0%",
"0.00%",
"0.00E+00",
"# ?/?",
"# ??/??",
"m/d/yy",
"d-mmm-yy",
"d-mmm",
"mmm-yy",
"h:mm AM/PM",
"h:mm:ss AM/PM",
"h:mm",
"h:mm:ss",
"m/d/yy h:mm",
// 0x17 - 0x24 reserved for international and undocumented
// TODO - one junit relies on these values which seems incorrect
"reserved-0x17",
"reserved-0x18",
"reserved-0x19",
"reserved-0x1A",
"reserved-0x1B",
"reserved-0x1C",
"reserved-0x1D",
"reserved-0x1E",
"reserved-0x1F",
"reserved-0x20",
"reserved-0x21",
"reserved-0x22",
"reserved-0x23",
"reserved-0x24",
"#,##0_);(#,##0)",
"#,##0_);[Red](#,##0)",
"#,##0.00_);(#,##0.00)",
"#,##0.00_);[Red](#,##0.00)",
"_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)",
"_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)",
"_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)",
"_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)",
"mm:ss",
"[h]:mm:ss",
"mm:ss.0",
"##0.0E+0",
"@"
};
/**
* @return array of built-in data formats
*/
public static String[] getAll() {
return _formats.clone();
}
/**
* Get the format string that matches the given format index
*
* @param index of a built in format
* @return string represented at index of format or <code>null</code> if there is not a built-in format at that index
*/
public static String getBuiltinFormat(int index) {
if (index < 0 || index >=_formats.length) {
return null;
}
return _formats[index];
}
/**
* Get the format index that matches the given format string.<br>
* Automatically converts "text" to excel's format string to represent text.
*
* @param pFmt string matching a built-in format
* @return index of format or -1 if undefined.
*/
public static int getBuiltinFormat(String pFmt) {
String fmt = "TEXT".equalsIgnoreCase(pFmt) ? "@" : pFmt;
int i = -1;
for (String f : _formats) {
i++;
if (f.equals(fmt)) {
return i;
}
}
return -1;
}
}
в проекте,Зачастую мы можем достичь желаемых результатов разными способами.,На практике нам следует уделять больше внимания методу, который может минимизировать изменения.,Более масштабируемый,Если мы используем базу данных для хранения десятичных дробей,Тогда, возможно, для некоторых мест получение высокоточных значений не имеет смысла.,Таким образом, целостность исходных данных по-прежнему гарантируется.,Обрабатывайте данные только там, где это необходимо бизнесу,Это минимизирует масштаб воздействия.
Технологии всегда служат потребностям бизнеса. Говорить о технологиях без учета реальных потребностей будет бессмысленно.
Easy Excel Экспорт EasyExcel сохраняет 2 десятичных знака. MySql сохраняет два десятичных знака (VIP Collector’s Edition).