Вставка нового столбца в уже существующий файл Excel с использованием jxl api

Я использую jxl api для редактирования существующего файла Excel. Но когда я пытаюсь добавить новый столбец и записывать лист, показывающий исключение нулевого указателя. Код, который я использую, показан ниже:

File file = new File("d:\\test.xls");
Workbook workbook;
WritableWorkbook copy = null;
if (file.exists()) {

    try {
        workbook = Workbook.getWorkbook(file);
        copy = Workbook.createWorkbook(new File("C:\\TEMP\\temp.xls"),
                workbook);
    } catch (BiffException e) {

        e.printStackTrace();
    } catch (FileNotFoundException fnf) {
        fnf.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();
    }

}   
WritableSheet sheet = copy.getSheet(0);

sheet.insertColumn(2); //this statement causes error  
                      //if I comment it the code works fine

try {
    copy.write();
    copy.close();
}
catch(Exception e)
{

    e.printStackTrace();
}

Пожалуйста, помогите мне решить эту проблему и вставьте новый столбец.

Я могу успешно редактировать отдельные ячейки Excel и записывать файл.


person Jaison    schedule 09.05.2012    source источник


Ответы (4)


Возможно, API, который вы используете, не самый лучший. У меня также была эта проблема (исключение нулевого указателя в строке вставки столбца), и я не мог найти никакого решения, пока не загрузил jexcelapi.

HTH

person PowR    schedule 26.09.2012

Приведенный выше код может нормально работать на моем компьютере. вам лучше сообщить нам информацию об исключении и поместить сюда весь код.

person Mark Yao    schedule 09.05.2012
comment
Он работает до тех пор, пока вы не добавите фильтр данных в файл. Пожалуйста, проверьте, работает ли он после добавления фильтра данных в файл. - person Jaison; 29.11.2012

Мы можем вставить новую ячейку и, таким образом, новую строку / столбец, как это -

Workbook aWorkBook = Workbook.getWorkbook(new File("Originalfile.xls"));
        WritableWorkbook aCopy = Workbook.createWorkbook(new File("Originalfile.xls"), aWorkBook);
        WritableSheet aCopySheet = aCopy.getSheet(0);//index of the needed sheet
        WritableCell aWritableCell = aCopySheet.getWritableCell(1,1);//no need!
        jxl.write.Label anotherWritableCell =  new jxl.write.Label(1,12 ,"SUN");
                //position of the new cell in column,row
            //can be a new Label() or new Number() or new Formula

            aCopySheet.addCell(anotherWritableCell);

        aCopy.write();
        aCopy.close();

Я не понимаю, что делают методы insertRow () или insertColumn (). Надеюсь, поможет!

person Ishank    schedule 25.05.2012
comment
Это решение отлично работает, если вы хотите написать новую ячейку. Но мой файл уже содержит значения, и я хочу вставить новый столбец. это означает, что вся информация, которая в данный момент присутствует в файле, должна перейти в следующий столбец. - person Jaison; 29.11.2012
comment
код полезен, когда вы хотите записать ячейки в уже существующий файл Excel. Проблема звучит так, будто вам просто нужно сначала прочитать уже существующие строки - взять данные в последней строке - вставить новую строку, используя приведенный выше код, и заполнить новая ячейка с данными последней ячейки, а затем записать данные последних ячеек в последнюю строку, поэтому ‹b› все, что вам нужно, - это добавить еще немного логики в приведенный выше код .. ‹/b› - person Ishank; 01.12.2012

Это невозможно с jxl, вы должны использовать apache poi http://poi.apache.org/ (или что-то еще, если есть еще что-то)

С jxl вы можете только читать или писать книги, но не редактировать существующие. Вы также можете копировать книгу и редактировать вновь созданную. WritableWorkbook newWorkbook = Workbook.createWorkbook (newFile, workbookTemplate, wbSettings); Но вы потеряете много форматирования и всех автофильтров, что было моей проблемой, когда я использовал jxl.

Здесь представлены отличные примеры http://poi.apache.org/spreadsheet/quick-guide.html http://www.kodejava.org/browse/49.html

person Lukas    schedule 05.04.2013