当前位置:网站首页 > 技术博客 > 正文

java创建xlsx文件

使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用 Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

package com.yonyou.test;

import java.io.File;import java.io.IOException;

import jxl.Workbook;import jxl.format.Alignment;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.Colour;import jxl.format.UnderlineStyle;import jxl.write.Label;import jxl.write.NumberFormats;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 JxlTable {

private final static JxlTable jxlTable = new JxlTable();

public static JxlTable getInstance() {  return jxlTable; }

public JxlTable() { }

public boolean createTable(String header, String[] body, String filePath) {  boolean createFlag = true;  WritableWorkbook book;  try {   // 根据路径生成excel文件   book = Workbook.createWorkbook(new File(filePath));   // 创建一个sheet名为"表格"   WritableSheet sheet = book.createSheet("表格", 0);   // 设置NO列宽度   sheet.setColumnView(1, 5);   // 去掉整个sheet中的网格线   sheet.getSettings().setShowGridLines(false);   Label tempLabel = null;   // 表头输出   String[] headerArr = header.split(",");   int headerLen = headerArr.length;   // 循环写入表头内容   for (int i = 0; i < headerLen; i++) {    tempLabel = new Label(1 + i, 1, headerArr[i],      getHeaderCellStyle());    sheet.addCell(tempLabel);   }   // 表体输出   int bodyLen = body.length;   // 循环写入表体内容   for (int j = 0; j < bodyLen; j++) {    String[] bodyTempArr = body[j].split(",");    for (int k = 0; k < bodyTempArr.length; k++) {     WritableCellFormat tempCellFormat = null;     tempCellFormat = getBodyCellStyle();     if (tempCellFormat != null) {      if (k == 0 || k == (bodyTempArr.length - 1)) {       tempCellFormat.setAlignment(Alignment.CENTRE);      }     }     tempLabel = new Label(1 + k, 2 + j, bodyTempArr[k],       tempCellFormat);     sheet.addCell(tempLabel);    }   }   book.write();   book.close();  } catch (IOException e) {   createFlag = false;   System.out.println("EXCEL创建失败!");   e.printStackTrace();  } catch (RowsExceededException e) {   createFlag = false;   System.out.println("EXCEL单元设置创建失败!");   e.printStackTrace();  } catch (WriteException e) {   createFlag = false;   System.out.println("EXCEL写入失败!");   e.printStackTrace();  }

return createFlag; }

public WritableCellFormat getHeaderCellStyle() {  WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10,    WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE);  WritableCellFormat headerFormat = new WritableCellFormat(    NumberFormats.TEXT);  try {   // 添加字体设置   headerFormat.setFont(font);   // 设置单元格背景色:表头为黄色   headerFormat.setBackground(Colour.YELLOW);   // 设置表头表格边框样式   // 整个表格线为粗线、黑色   headerFormat.setBorder(Border.ALL, BorderLineStyle.THICK,     Colour.BLACK);   // 表头内容水平居中显示   headerFormat.setAlignment(Alignment.CENTRE);  } catch (WriteException e) {   System.out.println("表头单元格样式设置失败!");  }  return headerFormat; }

public WritableCellFormat getBodyCellStyle() {  WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10,    WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE);  WritableCellFormat bodyFormat = new WritableCellFormat(font);  try {   // 设置单元格背景色:表体为白色   bodyFormat.setBackground(Colour.WHITE);   // 设置表头表格边框样式   // 整个表格线为细线、黑色   bodyFormat     .setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);  } catch (WriteException e) {   System.out.println("表体单元格样式设置失败!");  }  return bodyFormat; }

public static void main(String[] args) {  String header = "NO,姓名,性别,年龄";  String[] body = new String[4];  body[0] = "1,欧阳锋,男,68";  body[1] = "2,黄药师,男,67";  body[2] = "3,洪七公,男,70";  body[3] = "4,郭靖,男,32";  String filePath = "e:/test.xls";  JxlTable testJxl = JxlTable.getInstance();  boolean flag = testJxl.createTable(header, body, filePath);  if (flag) {   System.out.println("表格创建成功!!");  } }}

分步讲解:

读取excel文件

要读取excel文件首先应该建立一个wordbook:

Workbook wb=Workbook.getWorkbook(File file);

Workbook wb=Workbook.getWorkbook(InputStream is);

然后就可以获得它的工作表:

Sheet[] sheets=wb.getSheets();            //获得所有工作表

Sheet sheet=wb.getSheet(0);               //表示获得第一个工作表。

最后就可以获得对某工作表的某些单元格的值:

Cell cell=sheet.getCell(0,0);          //获得第一列 第一行的数据。第一个参数为列

String value=cell.getContents();    //获得该单元格的字符串形式的值

String type=cell.getType();           //获得该单元格的数据类型。

关闭workbook工作流:

当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的 过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:

wb.close();

注意:只有完成对该excel的操作后才可以关闭,关闭后在调用如Sheet s=wb.getSheet(0)会为null的。

常用的方法介绍:

Workbook类提供的方法

1. int getNumberOfSheets()

获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

int sheets = rwb.getNumberOfSheets();

2. Sheet[] getSheets()

返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

Sheet[] sheets = rwb.getSheets();

Sheet接口提供的方法

1. String getName()

获取Sheet的名称,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

String sheetName = rs.getName();

2. int getColumns()

获取Sheet表中所包含的总列数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

int rsColumns = rs.getColumns();

3. Cell[] getColumn(int column)

获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

Cell[] cell = rs.getColumn(0);

4. int getRows()

获取Sheet表中所包含的总行数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

int rsRows = rs.getRows();

5. Cell[] getRow(int row)

  • 上一篇: java jls
  • 下一篇: 登录注册vue
  • 版权声明


    相关文章:

  • java jls2024-10-23 23:01:03
  • java list(Methods inherited from interface java.util.Collection)2024-10-23 23:01:03
  • java队列(Java精讲 | 45张图庖丁解牛18种Queue,你知道几种?)2024-10-23 23:01:03
  • 一个初中生学java(初中如何学好java)2024-10-23 23:01:03
  • java list(Java ArrayList)2024-10-23 23:01:03
  • 登录注册vue2024-10-23 23:01:03
  • excel xll开发工具2024-10-23 23:01:03
  • vue3使用vue2组件2024-10-23 23:01:03
  • vue2使用swiper2024-10-23 23:01:03
  • js都是怎么服务的2024-10-23 23:01:03