使用java excel库-can';无法打开文件

使用java excel库-can';无法打开文件,java,excel,Java,Excel,我使用jxl以以下方式编写: WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls")); WritableSheet sheet = workbook.createSheet("First Sheet", 0); Label label = new Label(0, 2, "A label record"); sheet.addCell(label); Number number = new

我使用jxl以以下方式编写:

WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));

WritableSheet sheet = workbook.createSheet("First Sheet", 0);

Label label = new Label(0, 2, "A label record"); 
sheet.addCell(label); 

Number number = new Number(3, 4, 3.1459); 
sheet.addCell(number);
当我尝试打开该文件时,出现以下错误:

您试图打开的文件的格式不是扩展名指定的格式。在打开文件之前,请确认文件未损坏且来自受信任的源。您想现在打开该文件吗


单击“是”时,它是空的。

您需要添加以下语句:

workbook.write(); 
workbook.close();

您需要添加以下语句:

workbook.write(); 
workbook.close();

我不能说你的代码,但如果你想将数据写入excel文件,那么你可以使用这个特殊的代码,我已经使用了1000多次

import java.io.File;
import java.io.IOException;
import java.util.Locale;

import jxl.CellView;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.UnderlineStyle;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class WriteExcel {

    private WritableCellFormat timesBoldUnderline;
    private WritableCellFormat times;
    private String inputFile;
    private String[][] contentD;
    private int value;

    public void setOutputFile(String inputFile) {
        this.inputFile = inputFile;
    }

    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("Report", 0);
        WritableSheet excelSheet = workbook.getSheet(0);
        createLabel(excelSheet);
        createContent(excelSheet);

        workbook.write();
        workbook.close();
    }

    private void createLabel(WritableSheet sheet)
            throws WriteException {
        // Lets create a times font
        WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);
        // Define the cell format
        times = new WritableCellFormat(times10pt);
        // Lets automatically wrap the cells
        times.setWrap(true);

        // Create create a bold font with unterlines
        WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD, false,
                UnderlineStyle.SINGLE);
        timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline);
        // Lets automatically wrap the cells
        timesBoldUnderline.setWrap(true);

        CellView cv = new CellView();
        cv.setFormat(times);
        cv.setFormat(timesBoldUnderline);
        //cv.setAutosize(true);

        // Write a few headers
        addCaption(sheet, 0, 1, "Images");
        addCaption(sheet, 2, 1, "XXXXXXXX");


    }

    private void createContent(WritableSheet sheet) throws WriteException,
            RowsExceededException {
        // Lets calculate the sum of it
        StringBuffer buf = new StringBuffer();
        buf.append("SUM(A2:A10)");
        Formula f = new Formula(0, 10, buf.toString());
        sheet.addCell(f);
        buf = new StringBuffer();
        buf.append("SUM(B2:B10)");
        f = new Formula(1, 10, buf.toString());
        sheet.addCell(f);

        // Now a bit of text
        for (int i = 0; i < contentD.length; i++) {
            for (int j = 0; j < contentD[0].length; j++) {
                // First column
                addLabel(sheet, j, i + 2, contentD[i][j]);
            }
        }
    }

    private void addCaption(WritableSheet sheet, int column, int row, String s)
            throws RowsExceededException, WriteException {
        Label label;
        label = new Label(column, row, s, timesBoldUnderline);
        sheet.addCell(label);
    }

    private void addNumber(WritableSheet sheet, int column, int row,
            Integer integer) throws WriteException, RowsExceededException {
        Number number;
        number = new Number(column, row, integer, times);
        sheet.addCell(number);
    }

    private void addLabel(WritableSheet sheet, int column, int row, String s)
            throws WriteException, RowsExceededException {
        Label label;
        label = new Label(column, row, s, times);
        sheet.addCell(label);
    }

    public WriteExcel(String fileName, String[][] content) throws WriteException, IOException {
        contentD = content;
        setOutputFile(fileName);
        write();
        System.out.println("Please check the result file under c:/temp/lars.xls ");
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.util.Locale;
导入jxl.CellView;
导入jxl.工作簿;
导入jxl.WorkbookSettings;
导入jxl.format.UnderlineStyle;
导入jxl.write.Formula;
导入jxl.write.Label;
导入jxl.write.Number;
导入jxl.write.WritableCellFormat;
导入jxl.write.WritableFont;
导入jxl.write.WritableSheet;
导入jxl.write.WritableWorkbook;
导入jxl.write.WriteException;
导入jxl.write.biff.rowseceedexception;
公共类WriteExcel{
私有可写CellFormat timesBoldUnderline;
私有可写单元格式时间;
私有字符串输入文件;
私有字符串[][]content;
私有int值;
公共void setOutputFile(字符串输入文件){
this.inputFile=inputFile;
}
public void write()引发IOException,WriteException{
文件文件=新文件(inputFile);
WorkbookSettings wbSettings=新建WorkbookSettings();
设置语言环境(新语言环境(“en”、“en”));
WritableWorkbook=workbook.createWorkbook(文件,wbSettings);
工作簿.createSheet(“报告”,0);
WritableSheet excelSheet=workbook.getSheet(0);
createLabel(excelSheet);
createContent(excelSheet);
workbook.write();
workbook.close();
}
私有void createLabel(可写工作表)
抛出WriteException{
//让我们创建一个times字体
WritableFont times10pt=新的WritableFont(WritableFont.TIMES,10);
//定义单元格格式
times=新的可写单元格格式(times10pt);
//让我们自动包装单元格
times.setWrap(true);
//创建带有粗体线的字体
WritableFont times10ptBoldUnderline=新的WritableFont(WritableFont.TIMES,10,WritableFont.BOLD,false,
花柱(单瓣);
timesBoldUnderline=新的可写单元格格式(times10ptBoldUnderline);
//让我们自动包装单元格
timesBoldUnderline.setWrap(true);
CellView cv=新的CellView();
简历格式(次);
cv.setFormat(timesBoldUnderline);
//cv.setAutosize(真);
//写几个标题
添加标题(第0页,第1页,“图像”);
添加标题(第2页,第1页,“XXXXXXXX”);
}
私有void createContent(WritableSheet sheet)引发WriteException,
rowseceedexception{
//让我们计算它的总和
StringBuffer buf=新的StringBuffer();
追加(“总和(A2:A10)”;
公式f=新公式(0,10,buf.toString());
表1.addCell(f);
buf=新的StringBuffer();
追加(“总和(B2:B10)”;
f=新公式(1,10,buf.toString());
表1.addCell(f);
//现在是一段文字
for(int i=0;i
就这样说吧,

WriteExcel WriteExcel=新的WriteExcel(“d:\res.xls”,contentData)


其中contentData是一个二维数组,包含excel工作表的数据。

我不能说您的代码,但如果您想将数据写入excel文件,则可以使用此特定代码,我已经使用了1000多次

import java.io.File;
import java.io.IOException;
import java.util.Locale;

import jxl.CellView;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.UnderlineStyle;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class WriteExcel {

    private WritableCellFormat timesBoldUnderline;
    private WritableCellFormat times;
    private String inputFile;
    private String[][] contentD;
    private int value;

    public void setOutputFile(String inputFile) {
        this.inputFile = inputFile;
    }

    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("Report", 0);
        WritableSheet excelSheet = workbook.getSheet(0);
        createLabel(excelSheet);
        createContent(excelSheet);

        workbook.write();
        workbook.close();
    }

    private void createLabel(WritableSheet sheet)
            throws WriteException {
        // Lets create a times font
        WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);
        // Define the cell format
        times = new WritableCellFormat(times10pt);
        // Lets automatically wrap the cells
        times.setWrap(true);

        // Create create a bold font with unterlines
        WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD, false,
                UnderlineStyle.SINGLE);
        timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline);
        // Lets automatically wrap the cells
        timesBoldUnderline.setWrap(true);

        CellView cv = new CellView();
        cv.setFormat(times);
        cv.setFormat(timesBoldUnderline);
        //cv.setAutosize(true);

        // Write a few headers
        addCaption(sheet, 0, 1, "Images");
        addCaption(sheet, 2, 1, "XXXXXXXX");


    }

    private void createContent(WritableSheet sheet) throws WriteException,
            RowsExceededException {
        // Lets calculate the sum of it
        StringBuffer buf = new StringBuffer();
        buf.append("SUM(A2:A10)");
        Formula f = new Formula(0, 10, buf.toString());
        sheet.addCell(f);
        buf = new StringBuffer();
        buf.append("SUM(B2:B10)");
        f = new Formula(1, 10, buf.toString());
        sheet.addCell(f);

        // Now a bit of text
        for (int i = 0; i < contentD.length; i++) {
            for (int j = 0; j < contentD[0].length; j++) {
                // First column
                addLabel(sheet, j, i + 2, contentD[i][j]);
            }
        }
    }

    private void addCaption(WritableSheet sheet, int column, int row, String s)
            throws RowsExceededException, WriteException {
        Label label;
        label = new Label(column, row, s, timesBoldUnderline);
        sheet.addCell(label);
    }

    private void addNumber(WritableSheet sheet, int column, int row,
            Integer integer) throws WriteException, RowsExceededException {
        Number number;
        number = new Number(column, row, integer, times);
        sheet.addCell(number);
    }

    private void addLabel(WritableSheet sheet, int column, int row, String s)
            throws WriteException, RowsExceededException {
        Label label;
        label = new Label(column, row, s, times);
        sheet.addCell(label);
    }

    public WriteExcel(String fileName, String[][] content) throws WriteException, IOException {
        contentD = content;
        setOutputFile(fileName);
        write();
        System.out.println("Please check the result file under c:/temp/lars.xls ");
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.util.Locale;
导入jxl.CellView;
导入jxl.工作簿;
导入jxl.WorkbookSettings;
导入jxl.format.UnderlineStyle;
导入jxl.write.Formula;
导入jxl.write.Label;
导入jxl.write.Number;
导入jxl.write.WritableCellFormat;
导入jxl.write.WritableFont;
导入jxl.write.WritableSheet;
导入jxl.write.WritableWorkbook;
导入jxl.write.WriteException;
导入jxl.write.biff.rowseceedexception;
公共类WriteExcel{
私有可写CellFormat timesBoldUnderline;
私有可写单元格式时间;
私有字符串输入文件;
私有字符串[][]content;
私有int值;
公共void setOutputFile(字符串输入文件){
this.inputFile=inputFile;
}
public void write()引发IOException,WriteException{
文件文件=新文件(inputFile);
WorkbookSettings wbSettings=新建WorkbookSettings();