Измените формат столбца Excel с номера на текст в Java - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать шаблон Excel со всеми столбцами / ячейками в виде текста. Лист Excel имеет 5 столбцов

Вот мой код:

@RequestMapping(value = "/app/downloadTemplateForAssociateBankingDetails", method = RequestMethod.GET)
public void downloadTemplateForAssociateBankingDetails(HttpServletRequest request,HttpServletResponse response) throws Exception{
  @SuppressWarnings("resource")
  HSSFWorkbook workbook = new HSSFWorkbook();
  HSSFSheet sheet = workbook.createSheet("AssociateBankingTemplate");
  String[] tableColumns = Constants.DATA_MIGRATION_ASSOCIATE_BANKING_EXCEL_HEADERS;
  DataFormat fmt = workbook.createDataFormat();
  CellStyle cellStyle = workbook.createCellStyle();

  Row row = sheet.createRow(0);
  int cellnum = 0;
  for (String key : tableColumns) 
  {
    Cell cell = row.createCell(cellnum++);
    cellStyle.setDataFormat(
        fmt.getFormat("@"));
    cell.setCellStyle(cellStyle);
    cell.setCellValue((String)key);

  }

  try {
    File file = new File("Associate_Banking_Template.xls");
    FileOutputStream out = new FileOutputStream(file);
    workbook.write(out);

    out.close();
    out.flush();

    String mimeType = URLConnection.guessContentTypeFromName(file.getName());
    if (mimeType == null) {
      mimeType = "application/octet-stream";
    }
    response.setContentType(mimeType);
    StringBuilder fileNameSB = new StringBuilder();
    response.setHeader("Content-Disposition", fileNameSB.append("attachment; filename=\"").append(file.getName()).append("\"").toString());
    response.setContentLength((int) file.length());
    InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
    FileCopyUtils.copy(inputStream, response.getOutputStream());
    inputStream.close();
    response.getOutputStream().close();
    response.getOutputStream().flush();
  }
  catch (Exception e) {
    e.printStackTrace();
  }

}

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Кто вам скажет, что ячейка не в текстовом формате? MS Excel? LibreOffice Calc?

Следующий код работает для меня и должен дать вам ячейку в текстовом формате.

public class TextFormat {

  public static void main(String[] args) throws Exception {

    Workbook workbook = new HSSFWorkbook();
    Sheet sheet = workbook.createSheet("sheet");
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("Text");

    CellStyle cellStyle = workbook.createCellStyle();
    DataFormat fmt = workbook.createDataFormat();
    cellStyle.setDataFormat(fmt.getFormat("@"));
    cell.setCellStyle(cellStyle);

    OutputStream fileOut = new FileOutputStream("workbook.xls");
    workbook.write(fileOut);
    workbook.close();
  }
}

0 голосов
/ 27 марта 2019

Что-то вроде:

Worksheets("Sheet1").Range("A17").NumberFormat = "@"

Я не уверен, но думаю, что "@" означает текстовый формат. Это только для одной ячейки, если вы хотите, чтобы все ячейки, я думаю, это может быть что-то вроде этого:

Worksheets("Sheet1").Range("B:B").NumberFormat="@"

на случай, если вам нужен только столбец B

`Worksheets("Sheet1").Range("A:E").NumberFormat="@"` 

если вы хотите, чтобы все ваши данные читались как текст.

...