jxl切割excel文件

近期在实施一个项目。当中一项工作是处理历史数据。

客户提供过来的数据是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();
			}
		}

	}
}
时间: 2024-10-13 12:07:36

jxl切割excel文件的相关文章

Java文件操作系列[2]——使用JXL操作Excel文件

由于java流无法实现对Excel文件的读写操作,因此在项目中经常利用第三方开源的组件来实现.支持Excel文件操作的第三方开源组件主要有Apache的POI和开源社区的JXL. 总体来说,二者的区别是:JXL较为轻量级,如果是对Excel文件的简单操作,建议使用JXL:POI的功能相当强大,但同时处理问题也相当的繁琐. 1.准备工作 [必需]下载JXL的jar包:jxl.jar [非必需]JXL API  (提取密码:zgqj) 2.一些必要的说明 主要是对Excel结构的说明: Excel后

jxl创建Excel文件java代码示例

记得要下载 并 导入 jxl.jar 包,免积分下载地址:http://download.csdn.net/detail/u010011052/7561041 package Test; import java.io.*; import jxl.*; import jxl.format.Colour; import jxl.write.*; public class JXLTest { private static WritableWorkbook book; private static Wr

Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传的xls文件(文件格式见下user.xls),解析不为空的行与列,写入数据库. 文件user.xls格式为: 下面来看代码实例演示: 一.前端jsp页面(本来内容很多,这里精简了) <%@ page language="java" contentType="text/htm

JXL操作Excel文件

jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支持非常好,API是纯Java的, 并不 依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件. 另外需要说明的是,这套API对图形和图表的支持很有限,而且 仅仅识别PNG格式. 1.创建一个test.xls文件,向其写入数据 package com.ccit; imp

Java使用jxl对excel文件进行简单的读写

jxl的Jar包下载地址:百度网盘 import java.io.File; import java.io.IOException; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableCellFeatures; import jxl.write.WritableSheet; import jxl.wr

jxl导出Excel文件

一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat;

Java——jxl读取Excel文件

1.创建文件流,打开EXCEL文件(jxi不支持.xlsx文件,支持.xls) FileInputStream excelFile = new FileInputStream(excelPath); Workbook workbook = Workbook.getWorkbook(excelFile); 2.切换到对应文件名 Sheet excelSheet = workbook.getSheet(sheetName); 3.获取实际行数和列数 int rows = excelSheet.get

jxl读取excel文件异常:Unable to recognize OLE stream 的解决方法

问题成因 使用jxl方式读取,可能只能支持xls格式的文件,对于xlsx格式就不再支持 如果是从网站导出的excel文件,有的网站比较坑,导出的并不是标准格式的excel,而是将html改扩展名为xls的“伪”excel文件.当用excel打开这类文件时,会弹窗提示其“扩展名和文件类型不匹配”是否还要打开. 而且,使用文本编辑器打开,会发现这个所谓xls文件其实是xml标签的文件. 解决方法 在excel中打开,另存成xls就可以. 但当文件比较多时,可以使用excel vba批量另存. 第一种

使用jxl导入excel文件

import jxl.Cell;import jxl.Sheet;import jxl.Workbook; action中: /** * 导入计划 * @author liubf * @version 1.0 * @createTime 2015-6-16 */ @RequestMapping("insertWBSPlan") public ResBean insertWBSPlan (HttpServletRequest request, HttpServletResponse re