Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jxl将数据添加到Excel文件_Java_Excel_Jxl - Fatal编程技术网

Java 使用jxl将数据添加到Excel文件

Java 使用jxl将数据添加到Excel文件,java,excel,jxl,Java,Excel,Jxl,我正在使用jxl创建一个excel文件。首先,is应该只包含一些格式和有关样式的信息。然后,它应该在每次有人向它添加新数据时更新 public class WriteExcel { private static WritableWorkbook workbook; private static WritableCellFormat timesStandard; private String inputFile; final private static int

我正在使用jxl创建一个excel文件。首先,is应该只包含一些格式和有关样式的信息。然后,它应该在每次有人向它添加新数据时更新

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, 0, 1, 0);
        sheet.mergeCells(3, 0, 4, 0);
        sheet.mergeCells(6, 0, 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
的类成员,那么您的
modify()
方法不应该无效,而应该返回一个
可写工作簿

在我看来,当您调用
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, cols, rows, 2);
    return sheet;
    }
基本上。对addNumber进行类似的修改似乎也很合适。
然后相应的调用将是
sheet=addNumber(sheet,cols,rows,2)
w2=修改(w2)

我没有一个解决方案,只是建议切换到。这只是基本操作,jxl应该可以。