Apache Poi - Algo - PullRequest
       13

Apache Poi - Algo

0 голосов
/ 07 января 2012

Я работаю над тем, чтобы получать данные из базы данных и показывать в Excel. Я использую библиотеку Apache Poi для создания Excel.

вот фрагмент для генерации Excel.

public class GenerateReport {

    public void showReport() {

    List<T> t = sampleDao.getAllData();


    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet();
    HSSFRow row     = null;
        HSSFCell column = null;

        HSSFRow row1 = sheet.createRow(1);

        HSSFCell c11 = row1.createCell(1);
        HSSFCell c12 = row1.createCell(2);
        HSSFCell c13 = row1.createCell(3);
        HSSFCell c14 = row1.createCell(4);
        HSSFCell c15 = row1.createCell(5);

        c11.setCellValue("ID");
        c12.setCellValue("Date");
        c13.setCellValue("Time");
        c14.setCellValue("YES/NO");
        c15.setCellValue("Action");



for (final T sampleT: t) {

            ....algo and what should be written 

         }


    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    externalContext.setResponseContentType("application/vnd.ms-excel");
    externalContext.setResponseHeader("Content-Disposition",
                "attachment; filename=\"Sample Report");
    workbook.write(externalContext.getResponseOutputStream());
    facesContext.responseComplete();

    }
    }

// метод получения для DAO

public void setSampleDao(
                SampleDao sampleDao) {
            this.sampleDao = sampleDao;
        }

        public SampleDao getSampleDao() {
            return sampleDao;
        }

    }


sampleDao.getAllData();

Метод getAllData () возвращает данные, которые необходимо отобразить с помощью запроса.

Мне нужна помощь, как получить данные и что нужно записать в этом цикле for

for (final T sampleT: t) {

                ....algo and what should be written 

             }

Существует условие, что if c14.setCellValue ("YES / NO"); Если да, то под этой ячейкой c15.setCellValue («Действие») должно быть записано конкретное действие.


ID Дата Время ДА / НЕТ Действие


Да / Нет данных поступает из базы данных (sampleDao.getAllData ();), если присутствует Да, тогда мне придется написать конкретное действие в столбце действий, после извлечения вторых данных он проверит предыдущее Да / Нет , если оба одинаковы / или изменены, мне нужно написать действие в соответствии с ним.

Может ли кто-нибудь мне помочь

  1. при написании фрагмента для цикла for с условиями.
  2. и как установить данные в ячейках.

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Когда вы так много написали, я не понимаю, почему сложно заполнить цикл.

Вот алгоритм / псевдокод ...

String previousYesNo=null":
int rowcounter=2;
for (final T sampleT: t) {
  create hssf row with rowcounter
  create hssf cell for the 5 columns
  set data to all the columns from the sampleT object
  String yesNo=sampleT.getYesNO();
  if(previousYesNo!=null && prviousYesNo.equals(yesNo)){
    set action cell value to something
  }else{
    set action cell value to something else
  }
  previousYesNo=yesNo;
  rowCounter++;
}

Чтобы установить данные в ячейках:

HSSFRow row = sheet.getRow(rowIdx);
HSSFCell cell = row.getCell(colIdx);
//if its a string.. otherwise choose the correct cell type
cell.setCellType(HSSFCell..CELL_TYPE_STRING);
cell.setCellValue(new HSSFRichTextString(data));
0 голосов
/ 16 апреля 2016

Вы можете установить данные в ячейке следующим образом:

`

Cell cell = row.getCell(excelColNum);
            if (cell == null) {
    cell = row.createCell(excelColNum);
}
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue( cellValue);

`

...