2012-06-27 6 views
0

У меня возникла проблема при написании некоторых данных на листе Excel с помощью Apache POI. Я хочу вызвать функцию несколько раз, которая будет записывать данные в лист Excel, который я создал.записывать данные в файл excel в java, используя apache POI

Есть ли способ, которым я могу перемещать указатель на следующую строку каждый раз в конце функции ???

Мой код приведен ниже ...

public static void excelLog(String filename , String message) 
    { 

    String dest="D:\\testexcel.xls"; 
    HSSFWorkbook myWorkBook = new HSSFWorkbook(); 
    HSSFSheet mySheet = myWorkBook.createSheet(); 
    HSSFRow myRow = null; 
    HSSFCell myCell = null; 
    String excelData [][] = new String [1][2]; 
    excelData[0][0]=filename; 
    excelData[0][1]=message; 

    myRow = mySheet.createRow(rowNum); 

    for (int cellNum = 0; cellNum < 2 ; cellNum++){ 
    myCell = myRow.createCell((short) cellNum); 
    myCell.setCellValue(excelData[rowNum][cellNum]);  

    } 
    rowNum++; 

    try{ 
     FileOutputStream out = new FileOutputStream(dest); 
     myWorkBook.write(out); 
     out.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    }   
} 

Пожалуйста, помогите мне в этом. Спасибо :)

+0

еще одна вещь, мне было интересно, что здесь я просто хочу, чтобы вставить два столбца в листе первенствовать поэтому я использовал 2-D массив. если я должен заполнить 5 столбцов в листе, то использование массива будет слишком сложным правильно ??? так что тут замена? – ASH

ответ

3

Проблема с вашим кодом заключается в каждом вызове метода excelLog, он будет генерировать новый файл excel. Я изменил ваш код, как показано ниже.

import java.io.FileOutputStream; 

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

public class PoiSample { 

private static String dest = "D:\\testexcel.xls"; 
private static HSSFWorkbook myWorkBook = new HSSFWorkbook(); 
private static HSSFSheet mySheet = myWorkBook.createSheet(); 

public static void excelLog(String filename, String message, int rowNum) { 

    HSSFRow myRow = null; 
    HSSFCell myCell = null; 
    String excelData[][] = new String[1][2]; 
    excelData[0][0] = filename; 
    excelData[0][1] = message; 

    myRow = mySheet.createRow(rowNum); 

    for (int cellNum = 0; cellNum < 2; cellNum++) { 
     myCell = myRow.createCell(cellNum); 
     myCell.setCellValue(excelData[0][cellNum]); 

    } 

    try { 
     FileOutputStream out = new FileOutputStream(dest); 
     myWorkBook.write(out); 
     out.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    for (int i = 0; i < 10; i++) 
     excelLog("filename " + i, "message " + i, i); 
} 

}

+0

Огромное вам спасибо – ASH

+0

Не могли бы вы рассказать мне еще одну вещь Мне было интересно, что здесь i jst хочет вставить два coloumns в лист excel, поэтому я использовал 2-мерный массив. если я должен заполнить 5 coloumns в листе, то использование массива будет слишком сложным правильно ??? так что тут замена? – ASH

+0

вы можете использовать карту вместо 2-мерного массива. –

4

Это модифицированный код, так это поддерживать динамический размер столбца. Идея состоит в том, чтобы создать строку один раз и повторно использовать ее, если строка уже существует.

import java.io.FileOutputStream; 

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

public class PoiSample { 

private static String dest = "D:\\testexcel.xls"; 
private static HSSFWorkbook myWorkBook = new HSSFWorkbook(); 
private static HSSFSheet mySheet = myWorkBook.createSheet(); 

private static void excelLog(int row, int col, String value) { 
    HSSFRow myRow = mySheet.getRow(row); 

    if (myRow == null) 
     myRow = mySheet.createRow(row); 

    HSSFCell myCell = myRow.createCell(col); 
    myCell.setCellValue(value); 
} 

public static void main(String[] args) { 
    int numCol = 10; // assume 10 cols 

    for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < numCol; j++) { 
      excelLog(i, j, "Row : " + i + ", Cell : " + j); 
     } 
    } 

    try { 
     FileOutputStream out = new FileOutputStream(dest); 
     myWorkBook.write(out); 
     out.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

Смежные вопросы