mirror of
https://github.com/dataease/dataease.git
synced 2026-05-14 21:12:33 +08:00
fix: 【数据集】数据集导出较大值为科学计数法显示,双击后变为文本
This commit is contained in:
committed by
xuwei-fit2cloud
parent
98372322f2
commit
45d028ff18
@@ -35,7 +35,6 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||
import org.apache.poi.xssf.usermodel.*;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@@ -133,20 +132,6 @@ public class ChartDataServer implements ChartDataApi {
|
||||
request.setHeader(dsHeader);
|
||||
request.setExcelTypes(dsTypes);
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(tableRow)) {
|
||||
FormatterCfgDTO formatterCfgDTO = new FormatterCfgDTO();
|
||||
for (Object[] objects : tableRow) {
|
||||
for (int i = 0; i < viewDTO.getXAxis().size(); i++) {
|
||||
if (viewDTO.getXAxis().get(i).getDeType().equals(DeTypeConstants.DE_INT) || viewDTO.getXAxis().get(i).getDeType().equals(DeTypeConstants.DE_FLOAT)) {
|
||||
try {
|
||||
objects[i] = valueFormatter(new BigDecimal(String.valueOf(objects[i])), viewDTO.getXAxis().get(i).getFormatterCfg() == null ? formatterCfgDTO : viewDTO.getXAxis().get(i).getFormatterCfg());
|
||||
} catch (Exception ignore) {
|
||||
ignore.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
request.setDetails(tableRow);
|
||||
request.setData(chartViewInfo.getData());
|
||||
} catch (Exception e) {
|
||||
@@ -271,7 +256,7 @@ public class ChartDataServer implements ChartDataApi {
|
||||
details.add(0, request.getHeader());
|
||||
ViewDetailField[] detailFields = request.getDetailFields();
|
||||
Object[] header = request.getHeader();
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes);
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, request.getViewInfo().getXAxis(), wb);
|
||||
sheetIndex++;
|
||||
details.clear();
|
||||
}
|
||||
@@ -285,7 +270,7 @@ public class ChartDataServer implements ChartDataApi {
|
||||
ViewDetailField[] detailFields = request.getDetailFields();
|
||||
Object[] header = request.getHeader();
|
||||
Sheet detailsSheet = wb.createSheet("数据");
|
||||
setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes);
|
||||
setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, null, null);
|
||||
} else {
|
||||
for (int i = 0; i < request.getMultiInfo().size(); i++) {
|
||||
ChartExcelRequestInner requestInner = request.getMultiInfo().get(i);
|
||||
@@ -295,7 +280,7 @@ public class ChartDataServer implements ChartDataApi {
|
||||
ViewDetailField[] detailFields = requestInner.getDetailFields();
|
||||
Object[] header = requestInner.getHeader();
|
||||
Sheet detailsSheet = wb.createSheet("数据 " + (i + 1));
|
||||
setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes);
|
||||
setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -320,12 +305,25 @@ public class ChartDataServer implements ChartDataApi {
|
||||
public void innerExportDataSetDetails(ChartExcelRequest request, HttpServletResponse response) throws Exception {
|
||||
this.innerExportDetails(request, response);
|
||||
}
|
||||
public static void setExcelData(Sheet detailsSheet, CellStyle cellStyle, Object[] header, List<Object[]> details, ViewDetailField[] detailFields, Integer[] excelTypes) {
|
||||
setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes,null);
|
||||
|
||||
public static void setExcelData(Sheet detailsSheet, CellStyle cellStyle, Object[] header, List<Object[]> details, ViewDetailField[] detailFields, Integer[] excelTypes, List<ChartViewFieldDTO> xAxis, Workbook wb) {
|
||||
setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, null, xAxis, wb);
|
||||
}
|
||||
|
||||
|
||||
public static void setExcelData(Sheet detailsSheet, CellStyle cellStyle, Object[] header, List<Object[]> details, ViewDetailField[] detailFields, Integer[] excelTypes,Comment comment) {
|
||||
public static void setExcelData(Sheet detailsSheet, CellStyle cellStyle, Object[] header, List<Object[]> details, ViewDetailField[] detailFields, Integer[] excelTypes, Comment comment, List<ChartViewFieldDTO> xAxis, Workbook wb) {
|
||||
List<CellStyle> styles = new ArrayList<>();
|
||||
if (xAxis != null) {
|
||||
for (ChartViewFieldDTO xAxi : xAxis) {
|
||||
if (xAxi.getDeType().equals(DeTypeConstants.DE_INT) || xAxi.getDeType().equals(DeTypeConstants.DE_FLOAT)) {
|
||||
FormatterCfgDTO formatterCfgDTO = xAxi.getFormatterCfg() == null ? new FormatterCfgDTO() : xAxi.getFormatterCfg();
|
||||
CellStyle formatterCellStyle = createCellStyle(wb, formatterCfgDTO);
|
||||
styles.add(formatterCellStyle);
|
||||
} else {
|
||||
styles.add(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
boolean mergeHead = false;
|
||||
if (ArrayUtils.isNotEmpty(detailFields)) {
|
||||
cellStyle.setBorderTop(BorderStyle.THIN);
|
||||
@@ -411,19 +409,91 @@ public class ChartDataServer implements ChartDataApi {
|
||||
detailsSheet.setColumnWidth(j, 255 * 20);
|
||||
} else if (cellValObj != null) {
|
||||
try {
|
||||
cell.setCellValue(cellValObj.toString());
|
||||
if (xAxis != null && xAxis.get(j).getDeType().equals(DeTypeConstants.DE_INT) || xAxis.get(j).getDeType().equals(DeTypeConstants.DE_FLOAT)) {
|
||||
try {
|
||||
FormatterCfgDTO formatterCfgDTO = xAxis.get(j).getFormatterCfg() == null ? new FormatterCfgDTO() : xAxis.get(j).getFormatterCfg();
|
||||
if (formatterCfgDTO.getType().equalsIgnoreCase("auto")) {
|
||||
|
||||
}
|
||||
if (styles.get(j) != null) {
|
||||
row.getCell(j).setCellStyle(styles.get(j));
|
||||
}
|
||||
|
||||
row.getCell(j).setCellValue(Double.valueOf(cellValue(formatterCfgDTO, new BigDecimal(cellValObj.toString()))));
|
||||
} catch (Exception e) {
|
||||
cell.setCellValue(cellValObj.toString());
|
||||
}
|
||||
} else {
|
||||
cell.setCellValue(cellValObj.toString());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LogUtil.warn("export excel data transform error");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String cellValue(FormatterCfgDTO formatterCfgDTO, BigDecimal value) {
|
||||
if (formatterCfgDTO.getType().equalsIgnoreCase("percent")) {
|
||||
return value.multiply(BigDecimal.valueOf(100)).toString();
|
||||
} else {
|
||||
return value.divide(BigDecimal.valueOf(formatterCfgDTO.getUnit())).toString();
|
||||
}
|
||||
}
|
||||
|
||||
private static CellStyle createCellStyle(Workbook workbook, FormatterCfgDTO formatter) {
|
||||
CellStyle cellStyle = workbook.createCellStyle();
|
||||
DataFormat format = workbook.createDataFormat();
|
||||
String formatStr = "";
|
||||
if (formatter.getType().equals("value")) {
|
||||
if (formatter.getDecimalCount() > 0) {
|
||||
formatStr = "0." + new String(new char[formatter.getDecimalCount()]).replace('\0', '0');
|
||||
} else {
|
||||
formatStr = "0";
|
||||
}
|
||||
switch (formatter.getUnit()) {
|
||||
case 1000:
|
||||
formatStr = formatStr + "千";
|
||||
break;
|
||||
case 10000:
|
||||
formatStr = formatStr + "万";
|
||||
break;
|
||||
case 1000000:
|
||||
formatStr = formatStr + "百万";
|
||||
break;
|
||||
case 100000000:
|
||||
formatStr = formatStr + "'亿'";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (formatter.getThousandSeparator()) {
|
||||
formatStr = "#,##" + formatStr;
|
||||
}
|
||||
if (StringUtils.isNotEmpty(formatter.getSuffix())) {
|
||||
formatStr = formatStr + formatter.getSuffix();
|
||||
}
|
||||
} else if (formatter.getType().equals("percent")) {
|
||||
if (formatter.getDecimalCount() > 0) {
|
||||
formatStr = "0." + new String(new char[formatter.getDecimalCount()]).replace('\0', '0');
|
||||
} else {
|
||||
formatStr = "0";
|
||||
}
|
||||
formatStr = formatStr + "%";
|
||||
}
|
||||
if (StringUtils.isNotEmpty(formatStr)) {
|
||||
cellStyle.setDataFormat(format.getFormat(formatStr));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return cellStyle;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> getFieldData(ChartViewDTO view, Long fieldId, String fieldType) throws Exception {
|
||||
return chartDataManage.getFieldData(view, fieldId, fieldType);
|
||||
|
||||
@@ -40,9 +40,7 @@ import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.extensions.datasource.factory.ProviderFactory;
|
||||
import io.dataease.extensions.datasource.model.SQLMeta;
|
||||
import io.dataease.extensions.datasource.provider.Provider;
|
||||
import io.dataease.extensions.view.dto.ChartViewDTO;
|
||||
import io.dataease.extensions.view.dto.ColumnPermissionItem;
|
||||
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeObj;
|
||||
import io.dataease.extensions.view.dto.*;
|
||||
import io.dataease.i18n.Translator;
|
||||
import io.dataease.license.config.XpackInteract;
|
||||
import io.dataease.license.utils.LicenseUtil;
|
||||
@@ -411,11 +409,7 @@ public class ExportCenterManage implements BaseExportApi {
|
||||
exportTask.setExportStatus("IN_PROGRESS");
|
||||
exportTaskMapper.updateById(exportTask);
|
||||
|
||||
getDataFillingApi().writeExcel(dataPath + "/" + exportTask.getId() + ".xlsx",
|
||||
new DataFillFormTableDataRequest()
|
||||
.setId(Long.parseLong(exportTask.getExportFrom()))
|
||||
.setWithoutLogs(true)
|
||||
, exportTask.getUserId(), Long.parseLong(request.get("org").toString()));
|
||||
getDataFillingApi().writeExcel(dataPath + "/" + exportTask.getId() + ".xlsx", new DataFillFormTableDataRequest().setId(Long.parseLong(exportTask.getExportFrom())).setWithoutLogs(true), exportTask.getUserId(), Long.parseLong(request.get("org").toString()));
|
||||
|
||||
|
||||
exportTask.setExportProgress("100");
|
||||
@@ -683,7 +677,7 @@ public class ExportCenterManage implements BaseExportApi {
|
||||
details.add(0, request.getHeader());
|
||||
ViewDetailField[] detailFields = request.getDetailFields();
|
||||
Object[] header = request.getHeader();
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes);
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, request.getViewInfo().getXAxis(), wb);
|
||||
sheetIndex++;
|
||||
details.clear();
|
||||
exportTask.setExportStatus("IN_PROGRESS");
|
||||
@@ -742,7 +736,7 @@ public class ExportCenterManage implements BaseExportApi {
|
||||
ViewDetailField[] detailFields = request.getDetailFields();
|
||||
Object[] header = request.getHeader();
|
||||
Sheet detailsSheet = wb.createSheet("数据");
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes);
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, null, null);
|
||||
}
|
||||
} else {
|
||||
//多个sheet
|
||||
@@ -756,7 +750,7 @@ public class ExportCenterManage implements BaseExportApi {
|
||||
Object[] header = requestInner.getHeader();
|
||||
//明细sheet
|
||||
Sheet detailsSheet = wb.createSheet("数据 " + (i + 1));
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes);
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -801,15 +795,15 @@ public class ExportCenterManage implements BaseExportApi {
|
||||
|
||||
}
|
||||
|
||||
public void addWatermarkTools(Workbook wb){
|
||||
public void addWatermarkTools(Workbook wb) {
|
||||
VisualizationWatermark watermark = watermarkMapper.selectById("system_default");
|
||||
WatermarkContentDTO watermarkContent = JsonUtil.parseObject(watermark.getSettingContent(), WatermarkContentDTO.class);
|
||||
if (watermarkContent.getEnable() && watermarkContent.getExcelEnable()) {
|
||||
UserFormVO userInfo = visualizationMapper.queryInnerUserInfo(AuthUtils.getUser().getUserId());
|
||||
// 在主逻辑中添加水印
|
||||
int watermarkPictureIdx = ExcelWatermarkUtils.addWatermarkImage(wb, watermarkContent,userInfo); // 生成水印图片并获取 ID
|
||||
int watermarkPictureIdx = ExcelWatermarkUtils.addWatermarkImage(wb, watermarkContent, userInfo); // 生成水印图片并获取 ID
|
||||
for (Sheet sheet : wb) {
|
||||
ExcelWatermarkUtils.addWatermarkToSheet(sheet,watermarkPictureIdx); // 为每个 Sheet 添加水印
|
||||
ExcelWatermarkUtils.addWatermarkToSheet(sheet, watermarkPictureIdx); // 为每个 Sheet 添加水印
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,6 @@ public class FormatterCfgDTO {
|
||||
private String type = "auto"; // auto,value,percent
|
||||
private Integer unit = 1; // 换算单位
|
||||
private String suffix = ""; // 单位后缀
|
||||
private Integer decimalCount = 2; // 小数位数
|
||||
private Integer decimalCount = 0; // 小数位数
|
||||
private Boolean thousandSeparator = false; // 千分符
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user