как добавить символ проверки в ячейку Excel SXSSFSheet java - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно поставить символ проверки в этой ячейке, если условие выполнено. Вот мой пример кода:

private SXSSFWorkbook RepWkBook = null;
private SXSSFSheet RepSheet = null;
private int RepRowNum = 0;
private ResultSet RepResult = null;
private Row RepRow = null;

    RepSheet = RepWkBook.createSheet(reportType);
    RepRowNum = 0;
    Row row = RepSheet.createRow(RepRowNum++);
    CellStyle cellStyle = RepWkBook.createCellStyle();
    Font font = RepWkBook.createFont();
    font.setBold(true);
    cellStyle.setFont(font);cell = RepRow.createCell(col++);

        boolean isMOBhigherThanArea = RepResult.getString("IS_MOB_HIGHER_THAN_AREA").equalsIgnoreCase("1");

        char st = '\u2713';

        if(isMOBhigherThanArea && (!areaStr.equalsIgnoreCase("No Data") || !mobStr.equalsIgnoreCase("No Data"))) {
            cell.setCellValue(st);}

Я уже использовал

UTF-16 - feff2713

UTF-16BE - 2713

UTF-16LE - 1327

UTF-8 - e29c93

нажмите здесь для получения примера вывода ВЫБОР ОБРАЗЦА ОЖИДАЕМЫХ

Площадь | MOB Target | Площадь Результат | MOB> Площадь

Город | 85% | 80% | ✔

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

Попробуйте использовать

ChrW(&H2713)

(источник: https://www.mrexcel.com/board/threads/how-to-insert-a-checkmark-with-vba.607363/)

1 голос
/ 18 февраля 2020

Нет метода setCellValue, который принимает char. Попробуйте использовать String там.

Для меня работает следующее:

import java.io.FileOutputStream;
import org.apache.poi.xssf.streaming.*;

class CreateSXSSFUnicode {

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

  char st = '\u2713';
  String[] headers = new String[] {"Area", "MOB Target", "Area Result", "MOB > Area"};

  try (SXSSFWorkbook workbook = new SXSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

   SXSSFSheet sheet = workbook.createSheet(); 
   SXSSFRow row;

   int rowNum = 0;
   row = sheet.createRow(rowNum++);
   for (int c = 0; c < headers.length; c++) {
    row.createCell(c).setCellValue(headers[c]);
   }
   row = sheet.createRow(rowNum++);
   int c = 0;
   row.createCell(c++).setCellValue("City");
   row.createCell(c++).setCellValue("85%");
   row.createCell(c++).setCellValue("80%");
   //row.createCell(c++).setCellValue(st); // does not work as st is a char
   row.createCell(c++).setCellValue(String.valueOf(st)); // this works

   workbook.write(fileout);
   workbook.dispose();
  }
 }
}

Результат:

enter image description here

0 голосов
/ 17 февраля 2020

Единственный способ сделать это - отформатировать ячейку со шрифтом symboli c, как Windings, и использовать соответствующий символ для символа проверки в этом шрифте. Ваш код будет выглядеть примерно так:

Font font = RepWkBook.createFont();
font.setBold(true);

Font wingDingFont = RepWkBook.createFont();
wingDingFont.setBold(true);
wingDingFont.setFontName("Wingdings);

cell = RepRow.createCell(col++);

boolean isMOBhigherThanArea = RepResult.getString("IS_MOB_HIGHER_THAN_AREA").equalsIgnoreCase("1");

if(isMOBhigherThanArea && (!areaStr.equalsIgnoreCase("No Data") || !mobStr.equalsIgnoreCase("No Data"))) {
    String st = "ü";
    cellStyle.setFont(wingDingFont);
    cell.setCellValue(st);
} else {
    cellStyle.setFont(font);
}
...