Невозможно воспроизвести вашу проблему.
Следующий код создает лист Excel
с идентификаторами в столбце A
, которые не теряют свой текстовый формат и начальные нули, даже если редактируется в Excel
s GUI
.
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
class CreateExcelNumberFormatText {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
DataFormat format = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(format.getFormat("@"));
Sheet sheet = workbook.createSheet();
sheet.setDefaultColumnStyle(0, textStyle);
Cell cell = sheet.createRow(0).createCell(0);
cell.setCellStyle(textStyle);
cell.setCellValue("Id");
cell = sheet.createRow(1).createCell(0);
cell.setCellStyle(textStyle);
cell.setCellValue("0000111");
cell = sheet.createRow(2).createCell(0);
cell.setCellStyle(textStyle);
cell.setCellValue("0001111");
workbook.write(fileout);
}
}
}
Что вы, вероятно, не ожидали, так это то, что apache poi
не применяет стиль столбца к вновь созданным ячейкам в этом столбце.Это нужно сделать в коде, иначе стиль ячейки будет General
.Настройка стиля столбца, тем не менее, необходима, так как иначе Excel
s GUI
не будет использовать стиль текста при добавлении туда содержимого ячейки.
Мой код завершен, протестирован и работает для меня.Простое редактирование ячеек в Excel
не может привести к потере части содержимого ячейки (ведущих нулей) из-за использования числового формата @ = Text
.
Конечно, если кто-то изменит формат номера столбца с Text
на General
, тогда 0000111
будет числом 111
после редактирования.Но это не может быть предотвращено, когда лист редактируется пользователем.
Может быть, можно дополнительно установить CellStyle.setQuotePrefixed .Как:
...
textStyle.setDataFormat(format.getFormat("@"));
textStyle.setQuotePrefixed(true);
...
Тогда весь контент будет дополняться префиксом цитаты апострофом '
дополнительно.Но это также может быть изменено пользователем, редактирующим лист.