jxl切割excel文件
2024-08-24 11:07:48
近期在实施一个项目。当中一项工作是处理历史数据。
客户提供过来的数据是excel表格,超过20万条记录,因为目标系统导入限制,每次仅仅能导入大小不超过8M的文件。所以须要对这些数据进行切割处理。在手工处理一遍后,认为能够通过写一个程序来自己主动实现切割。于是用JAVA写了一个程序,用于针对特定文件实现给定记录数的切割功能。
详见代码:
package cn.sean.main; import java.io.File;
import java.io.IOException; import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException; public class AccessExcel { Cell[] titleCell;
Cell[][] allCell;
jxl.Workbook workBook;
Sheet sheet; /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub String url = "c:\\a.xls";
AccessExcel ae = new AccessExcel();
ae.readExcel(url);
ae.splitExcel(500, "c:\\"); } /*
* 读取原excel文件,并将相关的数据存储到数组中
*/
public void readExcel(String source) { File file = new File(source);
try { workBook = Workbook.getWorkbook(file);
sheet = workBook.getSheet(0); titleCell = new Cell[sheet.getColumns()];// 用于存储列标题
allCell = new Cell[sheet.getColumns()][sheet.getRows()];// 用于存储全部单元格数据 // 将列标题存储存到一个一维数组中
for (int i = 0; i < titleCell.length; i++) {
titleCell[i] = sheet.getCell(i, 0);
}
// 将全部单元格数据存储到一个二维数组中
for (int i = 0; i < sheet.getColumns(); i++) {
for (int j = 0; j < sheet.getRows(); j++) {
allCell[i][j] = sheet.getCell(i, j); }
} } catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /*
*@param number代表须要分隔的行数
*@param destination代表分隔文件后存储的路径
*/
public void splitExcel(int number, String destination) { int index = (int) Math.ceil(sheet.getRows() / number);//计算须要分隔多少个文件
File[] files = new File[index + 1];
//初始化文件数组
for (int i = 0; i <= index; i++) {
files[i] = new File(destination + i + ".xls"); }
int n = number;
int y = 1;//用于记录行的位置
for (int i = 0; i <= index; i++) { try {
jxl.write.WritableWorkbook ww = Workbook
.createWorkbook(files[i]);
WritableSheet ws = ww.createSheet("sheet1", 0);
for (int t = 0; t < sheet.getColumns(); t++) {
ws.addCell(new Label(t, 0, allCell[t][0].getContents()));
} out: for (int m = 1; y < sheet.getRows(); y++, m++) { for (int x = 0; x < sheet.getColumns(); x++) { if (y >number) {
number += n;
break out;
} ws.addCell(new Label(x, m, allCell[x][y].getContents())); } }
ww.write();
ww.close(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}
最新文章
- Go - 路径、目录名、包名、文件名
- [Linux] - Docker pure-ftp使用
- redis使用笔记
- mysql support chinese
- batch insert 1 million datas into mysql
- nginx 一般网站部署常用参数设置
- jquery事件函数和原生事件绑定函数中return false的区别
- Android 多渠道打包原理和使用
- POJ3669(Meteor Shower)(bfs求最短路)
- php 用户访问菜单页面,必须登录,判断用户是否登录
- Qml 写的弹出层控件(13篇博客)
- Java NIO内存映射---上G大文件处理(转)
- 纯CSS实现tab选项卡切换
- python之FTP程序(支持多用户在线)
- struts2 type=";redirectAction";重定向 与动态调用方法
- Semaphore 源码分析
- 丢掉DDL,我用这招3分钟清空 MySQL 9亿记录数据表
- flask 第七章 简陋版智能玩具 +MongoDB初识和基本操作
- iOS开发之UIGestureRecognizer
- Markdown编辑器开发记录(二):Markdown编辑器的使用与开发入门
热门文章
- 【08】Vue 之 vue-cli
- pat 团体天梯 L3-011. 直捣黄龙
- Android Win7 上使用cmd生成Jks
- linux中的vi编辑器(二)
- poj 3281 Dining 拆点 最大流
- CentOS下VNC使用
- hdu 4995(离散化下标+模拟)
- 洛谷 P2863 [USACO06JAN]牛的舞会The Cow Prom-强连通分量(Tarjan)
- BZOJ——3412: [Usaco2009 Dec]Music Notes乐谱
- POJ 1239 Increasing Sequences [DP]