Salve! Sto scrivendo un programma in java che dovrebbe prendere un file Excel come input e scriverci sopra quindi mantenendo i dati già presenti e aggiungendo i nuovi.
Il problema non è nel codice nel senso che se uso un file Excel con pochi elementi, funziona. Però dovrei applicarlo ad un file più grande e con varie formule all'interno.
Il codice è questo
codice:import java.io.File; import java.io.IOException; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Number; import jxl.write.WritableCell; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.JxlWriteException; import jxl.FormulaCell; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import jxl.common.Assert; import jxl.common.Logger; import jxl.Cell; import jxl.CellFeatures; import jxl.CellReferenceHelper; import jxl.CellType; import jxl.DateCell; import jxl.HeaderFooter; import jxl.Range; import jxl.SheetSettings; import jxl.WorkbookSettings; import jxl.biff.AutoFilter; import jxl.biff.AutoFilterInfoRecord; import jxl.biff.AutoFilterRecord; import jxl.biff.ConditionalFormat; import jxl.biff.ConditionalFormatRangeRecord; import jxl.biff.ConditionalFormatRecord; import jxl.biff.ContinueRecord; import jxl.biff.DataValidation; import jxl.biff.DataValidityListRecord; import jxl.biff.DataValiditySettingsRecord; import jxl.biff.FilterModeRecord; import jxl.biff.FormattingRecords; import jxl.biff.Type; import jxl.biff.WorkspaceInformationRecord; import jxl.biff.drawing.Button; import jxl.biff.drawing.Chart; import jxl.biff.drawing.CheckBox; import jxl.biff.drawing.ComboBox; import jxl.biff.drawing.Comment; import jxl.biff.drawing.Drawing; import jxl.biff.drawing.Drawing2; import jxl.biff.drawing.DrawingData; import jxl.biff.drawing.DrawingDataException; import jxl.biff.drawing.MsoDrawingRecord; import jxl.biff.drawing.NoteRecord; import jxl.biff.drawing.ObjRecord; import jxl.biff.drawing.TextObjectRecord; import jxl.biff.formula.FormulaException; import jxl.format.PageOrder; import jxl.format.PageOrientation; import jxl.format.PaperSize; public class Principale { public static void main (String [] args) throws BiffException, IOException, JxlWriteException, WriteException{ try{ Workbook workbook = Workbook.getWorkbook(new File("Dati_S.Orsola.xls")); WritableWorkbook copy = Workbook.createWorkbook(new File("output.xls"), workbook); WritableSheet soluzione = copy.getSheet(0); WritableCell cell = soluzione.getWritableCell(1,1); Number n = new Number(1,1, 100); cell = (WritableCell) n; soluzione.addCell(cell); copy.write(); copy.close(); workbook.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (WriteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
E il risultato se uso il file Excel grande (cioè quello di cui ho bisogno) è questo:
Warning: Shared template formula is null - trying most recent formula template
Warning: Shared template formula is null - trying most recent formula template
Warning: Shared template formula is null - trying most recent formula template
Warning: Shared template formula is null - trying most recent formula template
Warning: Shared template formula is null - trying most recent formula template
Warning: Shared template formula is null - trying most recent formula template
Warning: Cell A67 already contains data
Warning: Cell A67 already contains data
Warning: Cell A67 already contains data
Warning: Cell A67 already contains data
Warning: Cell A67 already contains data
Warning: Cell A67 already contains data
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Unknown Source)
at java.util.Stack.pop(Unknown Source)
at jxl.biff.formula.BuiltInFunction.getOperands(Built InFunction.java:98)
at jxl.biff.formula.TokenFormulaParser.addOperator(To kenFormulaParser.java:459)
at jxl.biff.formula.TokenFormulaParser.parseSubExpres sion(TokenFormulaParser.java:378)
at jxl.biff.formula.TokenFormulaParser.parse(TokenFor mulaParser.java:118)
at jxl.biff.formula.FormulaParser.parse(FormulaParser .java:161)
at jxl.read.biff.SharedNumberFormulaRecord.getFormula Data(SharedNumberFormulaRecord.java:160)
at jxl.write.biff.ReadFormulaRecord.getData(ReadFormu laRecord.java:141)
at jxl.biff.WritableRecordData.getBytes(WritableRecor dData.java:71)
at jxl.write.biff.File.write(File.java:147)
at jxl.write.biff.RowRecord.writeCells(RowRecord.java :342)
at jxl.write.biff.SheetWriter.write(SheetWriter.java: 480)
at jxl.write.biff.WritableSheetImpl.write(WritableShe etImpl.java:1558)
at jxl.write.biff.WritableWorkbookImpl.write(Writable WorkbookImpl.java:950)
at a.Principale.main(Principale.java:79)
Mi sembra che il problema stia nella lettura di alcune formule nel file. Qualcuno sa dirmi se devo importare dell'altro? O se c'è una soluzione che non sia creare un file nuovo per l'outpur (come sto facendo ora)? Grazie![]()

Rispondi quotando