`

java:Excel

 
阅读更多

jxl操作excel

在开源世界中,有两套比较有影响的API供使用:POI,jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。 另外说明,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

使用如下:

搭建环境

 将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。

 基本操作

 一、创建文件

 拟生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为

 “第一页”,大致效果如下:

 

package test;
 
  //  生成Excel的类 
import   java.io.File;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
 
public class CreateExcel   {
    public static void main(String args[]){
        try{
               //打开文件 
               WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
               //生成名为“第一页”的工作表,参数0表示这是第一页 
               WritableSheet sheet = book.createSheet(  "  第一页  "  ,   0  );
               //在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
               //以及单元格内容为test 
               Label label = new Label(0,0, "test");
 
               //将定义好的单元格添加到工作表中 
               sheet.addCell(label);
 
               /* 
                * 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123
                */  
               jxl.write.Number number = new jxl.write.Number(1,0,555.12541);
               sheet.addCell(number);
 
               //   写入数据并关闭文件 
               book.write();
               book.close();

         }catch(Exception e){
             System.out.println(e);
         }  
     }  
 }  

 编译执行后,会产生一个Excel文件。

 

 

 

三、读取文件

 以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:

package test;
 
 //  读取Excel的类 
import java.io.File;
 
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
 
public class ReadExcel{
    public static void main(String args[]){
        try{
             Workbook book   =   Workbook.getWorkbook(new File("test.xls"));
             //获得第一个工作表对象 
             Sheet sheet   =   book.getSheet(0);
             //得到第一列第一行的单元格 
             Cell cell1 = sheet.getCell(0, 0);
             String result  = cell1.getContents();
             System.out.println(result);
             book.close();
         }catch(Exception e){
             System.out.println(e);
         }
     }  
 }

程序执行结果:test

 

 

 

 四、修改文件

 利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,

 其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:

package test;
 
import java.io.File;
 
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
 
public class UpdateExcel   {
    public static void main(String args[])   {
        try{
            //Excel获得文件 
            Workbook wb = Workbook.getWorkbook(new File("test.xls"));
            //打开一个文件的副本,并且指定数据写回到原文件 
            WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"), wb);
            //添加一个工作表 
            WritableSheet sheet = book.createSheet("第二页",1);
            sheet.addCell(new Label(0,0,"第二页的测试数据"));
            book.write();
            book.close();
         }catch(Exception e){
             System.out.println(e);
         }  
     }  
 }  

 

 

 

其他操作

 一、 数据格式化

 Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。

 1 字串格式化

 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont

 WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,

 为方便叙述,我们为每一行命令加了编号:

 

WritableFont font1 = new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①
 
WritableCellFormat format1 = new WritableCellFormat(font1); ②
 
Label label = new Label(0,0,"data 4   test",format1) ③

 

 其中:

①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPIjava-doc中有详细列表,这里不再列出。

②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。

③处使用了Label类的构造子,指定了字串被赋予那种格式。WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:

//  把水平对齐方式指定为居中 

format1.setAlignment(jxl.format.Alignment.CENTRE);

 

//  把垂直对齐方式指定为居中 

format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

 

二、单元格操作

 Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI

 提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API

 1 合并单元格

   WritableSheet.mergeCells(int m,int n,int p,int q);
 
    //  作用是从(m,n)到(p,q)的单元格全部合并,比如: 
    WritableSheet sheet = book.createSheet(“第一页”,0);
 
    //  合并第一列第一行到第六列第一行的所有单元格 
    sheet.mergeCells(0,0,5,0);

  合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。

 

 

2 行高和列宽

WritableSheet.setRowView(int i,int height);
 
//  作用是指定第i+1行的高度,比如:
 
//  将第一行的高度设为200 
sheet.setRowView(0,200);
 
WritableSheet.setColumnView(int i,int width);
 
//  作用是指定第i+1列的宽度,比如:
 
//  将第一列的宽度设为30 
sheet.setColumnView(0,30);

 

jExcelAPI还有其他的一些功能,比如插入图片等,这里就不再一一介绍,读者可以自己探索。

其中:如果读一个excel,需要知道它有多少行和多少列,如下操作:

  Workbook book = Workbook.getWorkbook(new File("测试1.xls"));
           // 获得第一个工作表对象 
           Sheet sheet = book.getSheet(0);
           //得到第一列第一行的单元格 
             int columnum = sheet.getColumns();  //得到列数 
             int rownum  =  sheet.getRows();  //得到行数 
           System.out.println(columnum);
         System.out.println(rownum);
           for(int   i = 0; i < rownum;i++)  //循环进行读写 
             {
               for(int j = 0;j < columnum;j++)   {
                 Cell cell1= sheet.getCell(j, i);
                 String result = cell1.getContents();
                 System.out.print(result);
                 System.out.print("\t");
             }  
             System.out.println();
         }  
         book.close();

 

另外,写入数据格式,可参考:

 

1)添加的字体样式

jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);

 

WritableFont()方法里参数说明:

这个方法算是一个容器,可以放进去好多属性

第一个: TIMES是字体大小,他写的是18

第二个: BOLD是判断是否为斜体,选择true时为斜体

第三个: ARIAL

第四个: UnderlineStyle.NO_UNDERLINE 下划线

第五个: jxl.format.Colour.RED 字体颜色是红色的

 

jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);

 

jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell",wcfF);

ws.addCell(labelC);

 

Label()方法里面有三个参数

第一个是代表列数,

第二是代表行数,

第三个代表要写入的内容

第四个是可选项,是输入这个label里面的样式

然后通过写sheet的方法addCell()把内容写进sheet里面。

 

2)添加带有formattingNumber对象

jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");

 

 

3)添加Number对象

3.1)显示number对象数据的格式

 

jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");

jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);

 

jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);

ws.addCell(labelNF);

   Number()方法参数说明:

前两上表示输入的位置

第三个表示输入的内容

 

 

4)添加Boolean对象

jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);

ws.addCell(labelB);

 

 

5)添加DateTime对象

jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());

ws.addCell(labelDT);

  DateTime()方法的参数说明

前两个表示输入的位置

第三个表示输入的当前时间

 

 

6)添加带有formattingDateFormat对象

这个显示当前时间的所有信息,包括年月日小时分秒

jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");

jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);

jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);

ws.addCell(labelDTF);

 

7)添加带有字体颜色Formatting的对象

jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);

jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

 

import="jxl.format.*

jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);

 

8)设置单元格样式

 jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

wcfFC.setBackGround(jxl.format.Colour.RED);//设置单元格的颜色为红色

wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);

 

jxl \012 "\012"强制换行

 

 

以下代码中存在有许多技巧:

 

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
 
import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.Range;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFeatures;
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 WriteExcelTest {
    static HashMap map = new HashMap();
 
    public static void main(String[] args) {
        try {
            // copyDateFormat(new File("c:\\a.xls"), 0, "c:\\copy of a.xls");
            writeExcelUseFormat("c:\\format.xls","test");
 
            // buildNewFormTemplete(new File("c:/templete.xls"),new File(
            // "c:/buildNewFormTemplete.xls"));
            // modifyDirectly1(new File("c:/templete.xls"));
            // modifyDirectly2(new File("c:/templete.xls"));
            //copyDateAndFormat(new File("c:/a.xls"), 0, "c:/a2.xls");
        } catch (Exception e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
    }
 
    public static void modifyDirectly2(File inputFile) throws Exception {
        Workbook w1 = Workbook.getWorkbook(inputFile);
        WritableWorkbook w2 = Workbook.createWorkbook(inputFile, w1);
        WritableSheet sheet = w2.getSheet(0);
 
        WritableCell cell = null;
        CellFormat cf = null;
 
        // 加粗
        cell = sheet.getWritableCell(0, 0);
        WritableFont bold = new WritableFont(WritableFont.ARIAL,
                WritableFont.DEFAULT_POINT_SIZE, WritableFont.BOLD);
        cf = new WritableCellFormat(bold);
        cell.setCellFormat(cf);
 
        // 设置下划线
        cell = sheet.getWritableCell(0, 1);
        WritableFont underline = new WritableFont(WritableFont.ARIAL,
                WritableFont.DEFAULT_POINT_SIZE, WritableFont.NO_BOLD, false,
                UnderlineStyle.SINGLE);
        cf = new WritableCellFormat(underline);
        cell.setCellFormat(cf);
 
        // 直截添加可以覆盖掉
        setCellValueDirectly(sheet, sheet.getCell(0, 2), new Double(4),
                CellType.NUMBER);
 
        w2.write();
        w2.close();
    }
 
    public static void modifyDirectly1(File file) {
        try {
            // Excel获得文件
            Workbook wb = Workbook.getWorkbook(file);
            // 打开一个文件的副本,并且指定数据写回到原文件
            WritableWorkbook book = Workbook.createWorkbook(file, wb);
            WritableSheet sheet0 = book.getSheet(0);
            sheet0.addCell(new Label(0, 1, "陈小稳"));
 
            // 添加一个工作表
            WritableSheet sheet = book.createSheet(" 第二页 ", 1);
            sheet.addCell(new Label(0, 0, " 第二页的测试数据 "));
            book.write();
            book.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
 
    public static void buildNewFormTemplete(File inputFile, File outputFile) {
        try {
            // Excel获得文件
            Workbook wb = Workbook.getWorkbook(inputFile);
            // 打开一个文件的副本,并且指定数据写回到原文件
            WritableWorkbook book = Workbook.createWorkbook(outputFile, wb);
            WritableSheet sheet0 = book.getSheet(0);
            sheet0.addCell(new Label(0, 1, "陈小稳"));
 
            // 添加一个工作表
            WritableSheet sheet = book.createSheet(" 第二页 ", 1);
            sheet.addCell(new Label(0, 0, " 第二页的测试数据 "));
 
            book.write();
            book.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
 
    public static void copyDateAndFormat(File inputFile,
            int inputFileSheetIndex, String outputFilePath) throws Exception {
        Workbook book = null;
        Cell cell = null;
        // 1.避免乱码的设置
        WorkbookSettings setting = new WorkbookSettings();
        java.util.Locale locale = new java.util.Locale("zh", "CN");
        setting.setLocale(locale);
        setting.setEncoding("ISO-8859-1");
        book = Workbook.getWorkbook(inputFile, setting);
        Sheet readonlySheet = book.getSheet(inputFileSheetIndex);
 
        OutputStream os = new FileOutputStream(outputFilePath);// 输出的Excel文件URL
        WritableWorkbook wwb = Workbook.createWorkbook(os);// 创建可写工作薄
        WritableSheet writableSheet = wwb.createSheet(readonlySheet.getName(),
                0);// 创建可写工作表
 
        // 2.誊写不同数据格式的数据
        for (int rowIndex = 0; rowIndex < readonlySheet.getRows(); rowIndex++) {
            for (int colIndex = 0; colIndex < readonlySheet.getColumns(); colIndex++) {
                cell = readonlySheet.getCell(colIndex, rowIndex);
                // A2B2为合并的单元格,A2有内容,B2为空
                // if(colIndex == 0 && rowIndex == 1){
                // System.out.println(colIndex + "," + rowIndex + " type:" +
                // cell.getType() +" :" + cell.getContents());
                // }
 
                // 【有各种设置格式】
                if (cell.getType() == CellType.DATE
                        || cell.getType() == CellType.DATE_FORMULA) {
                    writableSheet.addCell(new jxl.write.DateTime(colIndex,
                            rowIndex, ((DateCell) cell).getDate(),
                            new jxl.write.WritableCellFormat(cell
                                    .getCellFormat())));
                } else if (cell.getType() == CellType.NUMBER
                        || cell.getType() == CellType.NUMBER_FORMULA) {
                    writableSheet.addCell(new jxl.write.Number(colIndex,
                            rowIndex, ((jxl.NumberCell) cell).getValue(),
                            new jxl.write.WritableCellFormat(cell
                                    .getCellFormat())));
                } else if (cell.getType() == CellType.EMPTY) {
                    // 空的以及合并单元格中第一列外的
                    // System.out.println("EMPTY:"+cell.getContents());
                    // System.err.println("空单元格 at " + colIndex + "," + rowIndex
                    // +" content:" + cell.getContents());
                } else if (cell.getType() == CellType.LABEL
                        || cell.getType() == CellType.STRING_FORMULA) {
                    writableSheet.addCell(new Label(colIndex, rowIndex, cell
                            .getContents(), new jxl.write.WritableCellFormat(
                            cell.getCellFormat())));
                } else {
                    System.err.println("其它单元格类型:" + cell.getType() + " at "
                            + colIndex + "," + rowIndex + " content:"
                            + cell.getContents());
                }
 
                // if(cell.getType() == CellType.STRING_FORMULA){
                // System.err.println(colIndex + "," + rowIndex +":" +
                // cell.getContents() +" type:" + cell.getType());
                // }
            }
        }
 
        // 3.处理合并单元格的事情(复制合并单元格格式)
        Range[] range = readonlySheet.getMergedCells();
        for (int i = 0; i < range.length; i++) {
            // System.out.println("第"+i+"处合并的单元格:"
            // +",getTopLeft="+range[i].getTopLeft().getColumn()
            // +","+range[i].getTopLeft().getRow()
            // +",getBottomRight="+range[i].getBottomRight().getColumn()
            // +","+range[i].getBottomRight().getRow()
            // );
            // topleftXIndex, topleftYIndex, bottomRightXIndex,
            // bottomRightYIndex
            writableSheet.mergeCells(range[i].getTopLeft().getColumn(),
                    range[i].getTopLeft().getRow(), range[i].getBottomRight()
                            .getColumn(), range[i].getBottomRight().getRow());
        }
 
        // 4.设置行列高宽
        for (int colIndex = 0; colIndex < readonlySheet.getColumns(); colIndex++) {
            writableSheet.setColumnView(colIndex, readonlySheet
                    .getColumnView(colIndex));
        }
        for (int rowIndex = 0; rowIndex < readonlySheet.getRows(); rowIndex++) {
            writableSheet.setRowView(rowIndex, readonlySheet
                    .getRowView(rowIndex));
        }
 
        wwb.write();
        wwb.close();
        os.close();
    }
 
    public static void writeExcelUseFormat(String outputFilePath,
            String outputFileSheetName) throws Exception {
        OutputStream os = new FileOutputStream(outputFilePath);// 输出的Excel文件URL
        WritableWorkbook wwb = Workbook.createWorkbook(os);// 创建可写工作薄
        WritableSheet sheet = wwb.createSheet(outputFileSheetName, 0);// 创建可写工作表
 
        sheet.addCell(new Label(0, 0, "号码"));
        sheet.addCell(new Label(1, 0, "有效期"));
 
        // 1.写入时间的数据格式
        jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-MM-dd");
        jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
        jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 1, new Date(),wcfDF); // 自定义格式
        sheet.addCell(labelDTF);
 
        // 2.字体样式
        // WritableFont()方法里参数说明:
        // 这个方法算是一个容器,可以放进去好多属性
        // 第一个: TIMES是字体大小,他写的是18
        // 第二个: BOLD是判断是否为斜体,选择true时为斜体
        // 第三个: ARIAL
        // 第四个: UnderlineStyle.NO_UNDERLINE 下划线
        // 第五个: jxl.format.Colour.RED 字体颜色是红色的
        jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
        jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
        wcfF.setWrap(true);// 自动换行
        wcfF.setAlignment(jxl.format.Alignment.CENTRE);// 把水平对齐方式指定为居中
        wcfF.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 把垂直对齐方式指定为居中
        jxl.write.Label labelC = new jxl.write.Label(0, 1,"This is a Label cell", wcfF);
        sheet.addCell(labelC);
 
        // 3.添加带有formatting的Number对象
        jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
        jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
        jxl.write.Number labelNF = new jxl.write.Number(0, 2, 3.1415926, wcfN);
        sheet.addCell(labelNF);
 
        // 4.添加Boolean对象
        jxl.write.Boolean labelB = new jxl.write.Boolean(0, 3, false);
        sheet.addCell(labelB);
 
        // 5.设置一个注解
        WritableCellFeatures cellFeatures = new WritableCellFeatures();
        cellFeatures.setComment("添加Boolean对象");
        labelB.setCellFeatures(cellFeatures);
 
        // 6.单元格内换行
        WritableCellFormat wrappedText = new WritableCellFormat(
                WritableWorkbook.ARIAL_10_PT);
        wrappedText.setWrap(true);// 可换行的label样式
        Label label = new Label(4, 0, "测试,\012测试。。。", wrappedText); // "\012"强制换行
        sheet.addCell(label);
 
        // 7.数字的公式计算
        Number n = new jxl.write.Number(0, 9, 4.5);// A10
        sheet.addCell(n);
        n = new Number(1, 9, 8);// B10
        sheet.addCell(n);
        NumberFormat dp3 = new NumberFormat("#.###"); // 设置单元格里面的数字格式
        WritableCellFormat dp3cell = new WritableCellFormat(dp3);
        dp3cell.setWrap(true);
        Formula f = new Formula(2, 9, "(a10+b10)/2", dp3cell); // 设置C10公式
        sheet.addCell(f);
        f = new Formula(3, 9, "SUM(A10:B10)", dp3cell);// 设置D10公式
        sheet.addCell(f);
 
        // 8.设置sheet的样式
        sheet.getSettings().setProtected(true); // 设置xls的保护,单元格为只读的
        sheet.getSettings().setPassword("123"); // 设置xls的密码
        sheet.getSettings().setDefaultColumnWidth(10); // 设置列的默认宽度,2cm左右
        sheet.setRowView(3, 200);// 设置第4行高度
        sheet.setRowView(2, false);// 这样可以自动把行高扩展
        sheet.setColumnView(0, 300);// 设置第1列宽度,6cm左右
        sheet.mergeCells(0, 5, 1, 7);// 合并单元格:合并A6B8也就是1列6行 与 2列7行之间的矩形
 
        // 9.设置边框
        drawRect(sheet, 5, 6, 7, 6, BorderLineStyle.THICK, Colour.BLACK, null);
       
        sheet.mergeCells(1, 2, 3, 3);
 
        wwb.write();
        wwb.close();
        os.close();
    }
 
    public static void drawRect(WritableSheet sheet, int x, int y, int width, int height, BorderLineStyle style, Colour BorderColor,Colour bgColor) throws WriteException {
        for (int w = 0; w < width; w++) {
            for (int h = 0; h < height; h++) {
                WritableCellFormat alignStyle = new WritableCellFormat(); // 单元格样式
                alignStyle.setAlignment(Alignment.CENTRE); // 设置对齐方式
                alignStyle.setVerticalAlignment(VerticalAlignment.CENTRE);// 设置对齐方式
                if (h == 0)// 画上
                    alignStyle.setBorder(Border.TOP, style, BorderColor);// 设置边框的颜色和样式
 
                if (w == 0)// 画左
                    alignStyle.setBorder(Border.LEFT, style, BorderColor);// 设置边框的颜色和样式
 
                if (w == width - 1)// 画右
                    alignStyle.setBorder(Border.RIGHT, style, BorderColor);// 设置边框的颜色和样式
 
                if (h == height - 1)// 画下
                    alignStyle.setBorder(Border.BOTTOM, style, BorderColor);// 设置边框的颜色和样式
                // drawLine(sheet, x, y, Border.BOTTOM);
                if (bgColor != null)
                    alignStyle.setBackground(bgColor); // 背静色
                Label mergelabel = new Label(x, y, "", alignStyle);
                // topleftXIndex, topleftYIndex, bottomRightXIndex,
                // bottomRightYIndex
                // sheet.mergeCells(2, 5, 10, 10);
                sheet.addCell(mergelabel);
                y++;
            }
            y -= height;
            x++;
        }
    }
 
    public static ArrayList<String> sampleReadExcel(File inputFile,
            int inputFileSheetIndex) throws Exception {
        ArrayList<String> list = new ArrayList<String>();
        Workbook book = null;
        Cell cell = null;
        // 避免乱码的设置
        WorkbookSettings setting = new WorkbookSettings();
        java.util.Locale locale = new java.util.Locale("zh", "CN");
        setting.setLocale(locale);
        setting.setEncoding("ISO-8859-1");
        book = Workbook.getWorkbook(inputFile, setting);
 
        Sheet sheet = book.getSheet(inputFileSheetIndex);
        for (int rowIndex = 0; rowIndex < sheet.getRows(); rowIndex++) {// Excel第一行为表头,因此J初值设为1
            for (int colIndex = 0; colIndex < sheet.getColumns(); colIndex++) {// 只需从Excel中取出2列
                cell = sheet.getCell(colIndex, rowIndex);
                list.add(cell.getContents());
            }
        }
 
        // 【问题:如果在实际部署的时候没有写下面这句是否会导致不断消耗掉服务器的内存?jxl里面有个ReadWrite.java没有关闭读的,只关闭了写的】
        book.close();
 
        return list;
    }
 
    public static void setCellValueDirectly(WritableSheet sheet, Cell cell,Object newValue, CellType type) throws Exception {
        if (type == CellType.DATE || type == CellType.DATE_FORMULA) {
            sheet.addCell(new jxl.write.DateTime(cell.getColumn(), cell.getRow(), (Date) newValue, new jxl.write.WritableCellFormat(cell.getCellFormat())));
        } else if (type == CellType.NUMBER || type == CellType.NUMBER_FORMULA) {
            sheet.addCell(new jxl.write.Number(cell.getColumn(), cell.getRow(),((Double) newValue).doubleValue(),new jxl.write.WritableCellFormat(cell.getCellFormat())));
        } else if (type == CellType.LABEL || type == CellType.STRING_FORMULA) {
            sheet.addCell(new Label(cell.getColumn(), cell.getRow(),(String) newValue, new jxl.write.WritableCellFormat(cell.getCellFormat())));
        } else {
            throw new Exception("不支持的其它单元格类型:" + type);
            // System.err.println("不支持的其它单元格类型:" + cell.getType() + " at " +
            // cell.getColumn() + "," + cell.getRow() +" current content:" +
            // cell.getContents());
        }
    }

 

 

 

 

分享到:
评论

相关推荐

    JAVA读取Excel,建库建表,并生成java实体.rar

    JAVA读取Excel表格,建数据库建表,并生成java实体实例,这一篇通过JAVA读取Excel,将Excel表结构同步到数据库中,并生成java实体类。与上一篇类似,这里只介绍类说明,具体实现,可查看源码。 源码: ...

    java生成excel图表

    "Java生成Excel图表" Java生成Excel图表是使用Java语言来生成Excel图表的过程。Excel图表是指使用Excel软件生成的图表,例如柱状图、折线图、饼状图等。Java语言可以使用各种库和框架来生成Excel图表,例如...

    Java读取Excel内容

    Java读取Excel内容 v Java读取Excel内容 Java读取Excel内容

    java解析excel并导入数据库的web工程

    回答csdn论坛:Java语言下excel导入到mysql数据库表...

    Java中Excel转图片工具包(纯java)

    "Java中Excel转图片工具包(纯java)"就是这样一个解决方案,它实现了将Excel文件通过PDF中间格式转化为图片的功能。 首先,让我们了解一下这个工具包的工作原理。Excel文件本身并不直接支持转换为图片格式,但可以...

    java excel转html

    Java提供了多种库来实现这样的功能,这些库通常能够处理不同版本的Excel文件,包括32位和64位系统上的文件。 首先,我们需要了解Java中的主要库,如Apache POI和JExcelAPI,它们是用于读取和操作Excel文件的流行...

    JAVA读取Excel,建库建表,并生成java实体

    在Java开发中,有时我们需要处理Excel数据,例如从Excel文件中获取信息来构建数据库表结构,或者根据Excel数据生成对应的Java实体类。这个任务通常在数据导入、导出或者自动化测试场景中出现。下面我们将详细探讨...

    java 解析Excel 并判断解析的数据类型__Eclipse工程

    在Java编程环境中,解析Excel文件是一项常见的任务,特别是在数据处理、数据分析或自动化测试等领域。Eclipse作为Java开发的主流IDE,提供了丰富的工具和支持来完成这项工作。本项目名为"java 解析Excel 并判断解析...

    java导出excel(写入到excel后再下载)示例

    Java导出Excel是Java开发中常见的需求,尤其在数据分析、报表生成或数据交换场景中。本示例资源提供了一个RAR压缩包,包含了实现这一功能的源代码,主要讲解了两个核心部分:一是如何将数据写入Excel文件并保存在...

    LibreOffice:java 预览Excel、java预览word、java预览DOCX

    在Java中预览Excel、Word和DOCX文件,主要涉及以下几个关键知识点: 1. **JODConverter**:这是一个基于LibreOffice的Java库,用于转换Office文档。它提供了一个简单的接口,使得Java应用程序能够将不同格式的文档...

    Java 操作Excel和Word的所有资料

    Java 操作Excel和Word的所有资料Java 操作Excel和Word的所有资料Java 操作Excel和Word的所有资料Java 操作Excel和Word的所有资料Java 操作Excel和Word的所有资料Java 操作Excel和Word的所有资料Java 操作Excel和Word...

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    java将excel转html

    首先,Apache POI是Java的一个开源库,专门用于处理Microsoft Office格式的文件,如Excel(.xls和.xlsx)。它提供了一组API,使开发人员能够创建、修改和读取Excel文件。在“java将excel转html”的场景中,我们需要...

    java实现excel转csv

    在Java编程环境中,将Excel文件(.xls或.xlsx格式)转换为CSV文件是一项常见的任务,特别是在数据处理和分析中。本文将深入探讨如何利用Java来完成这个过程,主要使用Apache POI库,这是一个广泛使用的开源库,专门...

    java生成excel

    Java 生成 Excel 文件并下载 Java 生成 Excel 文件是指使用 Java 语言生成 Excel 文件的过程。Excel 文件是一种常用的电子表格文件格式,广泛应用于数据存储和分析。在 Java 中,可以使用 Apache POI 库来生成 ...

    java读取excel文件

    Java 读取 Excel 文件 Java 读取 Excel 文件是指使用 Java 语言从 Excel 文件中读取数据,并对其进行处理的过程。下面将详细介绍 Java 读取 Excel 文件的过程和相关知识点。 Java 读取 Excel 文件的步骤 1. 导入...

    JdbcExcel纯Java连接Excel

    在IT行业中,与Java编程相关的任务常常涉及到数据处理,而Excel作为常见的数据管理工具,其与Java的交互显得尤为重要。本篇文章将详细讲解如何使用纯Java连接Excel,并介绍压缩包内的相关资源。 纯Java连接Excel...

    Java操作Excel表格

    当我们谈论“Java操作Excel表格”时,通常是指使用Java来读取、写入或处理Microsoft Excel文件,这在数据分析、报表生成或者数据交换等场景中非常常见。本主题将围绕Java如何与Excel交互进行深入探讨。 首先,Java...

    Java读取Excel表格中的日期

    ### Java读取Excel表格中的日期 #### 背景与问题描述 在处理Excel文件时,经常遇到的一个问题是如何正确地识别并处理日期格式的数据。这是因为Excel中的日期格式较为复杂,有时甚至会出现不同版本的Excel文件中...

    EXCEL文件导入:JAVA读取Excel

    ### EXCEL文件导入:JAVA读取Excel #### POI简介及使用详解 ##### 一、引言 在软件开发过程中,特别是在企业级应用中,经常需要处理Excel文件。Java作为一种广泛应用的企业级编程语言,提供了多种工具和技术来...

Global site tag (gtag.js) - Google Analytics