我正在使用jxl创建一个excel文件.首先应该只包含一些关于样式的格式和信息.然后,每当有人向其添加新数据时,都应该更新它.
public class WriteExcel { private static WritableWorkbook workbook; private static WritableCellFormat timesStandard; private String inputFile; final private static int FONT_SIZE = 12; public void setOutputFile(String inputFile) { this.inputFile = inputFile; } private void prepareSheet(WritableSheet sheet) throws WriteException { sheet.mergeCells(0,1,0); sheet.mergeCells(3,4,0); sheet.mergeCells(6,7,0); WritableFont times12pt = new WritableFont(WritableFont.TIMES,FONT_SIZE); timesStandard = new WritableCellFormat(times12pt); CellView cv = new CellView(); cv.setFormat(timesStandard); } public void write() throws IOException,WriteException { File file = new File(inputFile); WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en","EN")); WritableWorkbook workbook = Workbook.createWorkbook(file,wbSettings); workbook.createSheet("First",0); WritableSheet excelSheet = workbook.getSheet(0); prepareSheet(excelSheet); workbook.write(); workbook.close(); } public static void main(String[] args) throws WriteException,IOException { WriteExcel test = new WriteExcel(); test.setOutputFile("c:/Users/H/Desktop/test.xls"); test.write(); } }
class Modify { private static Logger logger = Logger.getLogger(Modify.class); private File inputWorkbook; private File outputWorkbook; public Modify(String input,String output) { inputWorkbook = new File(input); outputWorkbook = new File(output); logger.info("Input file: " + input); logger.info("Output file: " + output); } public void readWrite() throws IOException,BiffException,WriteException { logger.info("Reading..."); Workbook w1 = Workbook.getWorkbook(inputWorkbook); logger.info("Copying..."); WritableWorkbook w2 = Workbook.createWorkbook(outputWorkbook,w1); if (inputWorkbook.getName().equals("test.xls")) { modify(w2); } w2.write(); w2.close(); logger.info("Done"); } private void modify(WritableWorkbook w) throws WriteException { logger.info("Modifying..."); WritableSheet sheet = w.getSheet("First"); //createContent(sheet); // contains methods responsible for adding data,for example: addNumber(sheet,cols,rows,2); private static void addNumber(WritableSheet sheet,int column,int row,double d) throws WriteException,RowsExceededException { Number number; number = new Number(column,row,d,timesStandard); sheet.addCell(number); } }
但我最终得到一个空白的Excel文件,仅包含合并的单元格.
如何介绍修改?
解决方法
既然你正在操作一个不是w2类的成员的WritableWorkbook对象,你不应该让你的modify()方法不是void而是返回一个WritableWorkbook吗?
在我看来,当你调用modify()时会实现一个新的,但是由于范围的原因,最后的所有更改都会被删除.
最后你会得到类似的东西
private WritableWorkbook modify(WritableWorkbook w) throws WriteException { logger.info("Modifying..."); WritableSheet sheet = w.getSheet("First"); //createContent(sheet); // contains methods responsible for adding data,for example: addNumber(sheet,2); return sheet; }
基本上.对addNumber的类似修改似乎也是如此.然后相应的调用将是sheet = addNumber(sheet,2);和w2 =修改(w2);