java JXL操作Excel文件

简介: -------------jxl和POI的区别(来自网络,感谢)-----jxl优点:①Jxl对中文支持非常好,操作简单,方法看名知意。②Jxl是纯javaAPI,在跨平台上表现的非常完美③生成Excel 2000标准格式④支持字体、数字、日期操作⑤能够修饰单元格属性④支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。缺点:效率低,图片支持

-------------jxl和POI的区别(来自网络,感谢)-----
jxl优点:
①Jxl对中文支持非常好,操作简单,方法看名知意。
②Jxl是纯javaAPI,在跨平台上表现的非常完美
③生成Excel 2000标准格式
④支持字体、数字、日期操作
⑤能够修饰单元格属性
④支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
缺点:效率低,图片支持不完善,对格式的支持不如POI强大
POI优点:
①效率高,效率测试,可参考:http://blog.csdn.net/jarvis_java/article/details/4924099
②支持公式,宏,一些企业应用上会非常实用
③能够修饰单元格属性
④支持字体、数字、日期操作
缺点:不成熟,bug较多

用于项目,主要是读取少量数据的导入和导出,需要稳定性,则选择jxl

pom.xml

		<!-- execel -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.13</version>
		</dependency>
		<dependency>
			<groupId>net.sourceforge.jexcelapi</groupId>
			<artifactId>jxl</artifactId>
			<version>2.6.12</version>
		</dependency>

操作代码如下:

package my.demo.java.z.file;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Boolean;
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;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Binary Interchange File Format:Biff 二进制文件交换格式
 * @desc 导入读取和导出写入
 * 
 * */
public class RWExcelFile_jxl {
	
	//log
	private static final Logger LOG = LoggerFactory.getLogger(ExcelFile_jxl.class);
	
	/**
	 * 读取excel工作簿信息.<br>
	 * @param book Excel工作簿
	 * */
	public void readExcel(Workbook book){
		try {
			//获取excel下的sheet页总个数
			int maxSheet = book.getNumberOfSheets();
			LOG.info("Excel工作簿的sheet页总数:" + maxSheet + "页.");
			//获取各个excel,可以控制需要导入那个页
			for(int sheeti = 0; sheeti < maxSheet; sheeti++){
				LOG.info("第" + (sheeti + 1) + "页读取开始……");
				//获取sheet页
				Sheet sheet = book.getSheet(sheeti);
				//通过名称获取sheet页
//				Sheet sheet = book.getSheet("sheet3");
				//获取sheet的名称
				String sheetName = sheet.getName();
				LOG.info("第" + (sheeti + 1) + "页名称:" + sheetName + ".");
				//当前sheet实际行总数
				int realRows = sheet.getRows();
				LOG.info("第" + (sheeti + 1) + "页实际行总数:" + realRows + "行.");
				//当前sheet实际列总数
				int realColumns = sheet.getColumns();
				LOG.info("第" + (sheeti + 1) + "页实际列总数:" + realColumns + "列.");
				//遍历每行每列的单元格 --类似二位数组定位excel单元格读取
				//行
				for(int row = 0; row < realRows; row++){
					//列
					for(int column = 0; column < realColumns; column++){
						//定位的单元格
						Cell cell = sheet.getCell(column, row);
						//获取单元格类型
						CellType type = cell.getType();
						//获取单元格内容 -- 注:数据验证格式/纯数字需对科学计数法转换
						String content = cell.getContents();
						LOG.info("单元格[第" + (sheeti + 1) + "页-第" + (row + 1) + "行-第" + (column + 1) + "列(类型:" + type + ")]:" + content);
					}
				}
				//释放资源
				sheet = null;
			}
		} catch (IndexOutOfBoundsException e) {
			LOG.info("读取excel工作簿信息数组下标越界:" + e.getMessage(), e);
		}finally{
			//释放资源
			book.close();
		}
	}
	
	/**
	 * 写入数据导出excel工作簿 -- 数据格式化
	 * */
	public void writeExcel(){
		WritableWorkbook book = null;
			try {
				//不加路径,导出在项目根目录
				String excelName = "writeExcel.xls";
				File excel = new File(excelName);
				book = Workbook.createWorkbook(excel);
				//参数一:名称,写入名为"batchexport"sheet页,参数二:0表示这是第一页
				WritableSheet sheet = book.createSheet("batchexport", 0);
				//行高和列宽
				//将第一行的高度设为320
				sheet.setRowView(0 , 320);
				//将第4列的宽度设为30
				sheet.setColumnView(3 , 300);
				sheet.setColumnView(1 , 30);
				//构造Label对象,并指定单元格位置是第一列第一行(0,0)--(列,行)
				Label str1 = new Label(0, 0, "卡卡");
				//将定义好的str1添加到工作表中
				sheet.addCell(str1);
				Number num1 = new Number(1, 0, 17400005555.889d);
				sheet.addCell(num1);
				Boolean bool1 = new Boolean(2, 0, true);
				sheet.addCell(bool1);
				String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis());
				//---字串格式化
				//WritableFont不同情况下有非常丰富的构造方法,jExcelAPI的java-doc中有详细介绍,也可搜索.
				//字串格式:字体为TIMES,字号16,加粗显示  --WritableFont.createFont("宋体")
				WritableFont font1 =  new WritableFont(WritableFont.TIMES, 16, WritableFont.BOLD);
				//WritableCellFormat类,通过它可以指定单元格的各种属性,单元格格式化
				WritableCellFormat format1 = new WritableCellFormat(font1);
				//定数据的对齐方式
				//水平对齐方式指定为居中
				format1.setAlignment(Alignment.CENTRE);
				format1.setVerticalAlignment(VerticalAlignment.CENTRE);
				//垂直对齐方式指定为居中
				//字串被赋予format1格式
				Label date = new Label(3, 0, "时间:" +time,format1);
				sheet.addCell(date);
				//合并第一列,第二行到第六列,第一行的所有单元格
				sheet.mergeCells(0 , 1, 5, 1);
				//写入数据到工作簿
				book.write();
				LOG.info(excelName + "写入文件导出成功.");
			} catch (RowsExceededException e) {
				LOG.info("写入Excel工作簿内容行超过异常:" + e.getMessage(), e);
			} catch (WriteException e) {
				LOG.info("写入Excel工作簿内容写入异常:" + e.getMessage(), e);
			} catch (IOException e) {
				LOG.info("写入Excel工作簿内容输入输出流异常:" + e.getMessage(), e);
			}finally{
				try {
					//关闭文件
					book.close();
				} catch (WriteException e) {
					LOG.info("写入Excel工作簿内容写入异常:" + e.getMessage(), e);
				} catch (IOException e) {
					LOG.info("写入Excel工作簿内容输入输出流异常:" + e.getMessage(), e);
				}
			}
	}
	
	/**
	 * 修改数据导出excel工作簿
	 * */
	public void editExcel(){
		String excelName = "writeExcel.xls";
		Workbook orgBook = null;
		WritableWorkbook reBook = null;
		try {
			File orgExcel = new File(excelName);
			File reExcel = new File(excelName);
			//获得excel文件
			orgBook = Workbook.getWorkbook(orgExcel);
			//打开一个excel文件的副本,并且指定数据写回到原文件
			reBook = Workbook.createWorkbook(reExcel, orgBook);
			//添加一个工作页
			WritableSheet sheet = reBook.createSheet("editSheet", 1);
			sheet.addCell(new Label(0, 0, "编辑excel文件测试数据"));
			reBook.write();
			LOG.info(excelName + "编辑文件导出成功.");
		} catch (RowsExceededException e) {
			LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);
		} catch (BiffException e) {
			LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);
		} catch (WriteException e) {
			LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);
		} catch (IOException e) {
			LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);
		}finally{
			try {
				reBook.close();
				orgBook.close();
			} catch (WriteException e) {
				LOG.info("编辑Excel工作簿内容写入异常:" + e.getMessage(), e);
			} catch (IOException e) {
				LOG.info("编辑Excel工作簿内容输入输出流异常:" + e.getMessage(), e);
			}
		}
	}
	
	/**
	 * 文件形式.<br>
	 * 操作Excel工作簿.<br>
	 * @param file Excel文件
	 * */
	public void readExcelOfFile(File file){
		Workbook book = null;
		try {
			book = Workbook.getWorkbook(file);
			readExcel(book);
		} catch (BiffException e) {
			LOG.info("读取Excel工作簿文件二进制文件交换格式异常:" + e.getMessage(), e);
		} catch (IOException e) {
			LOG.info("读取Excel工作簿文件输入输出流异常:" + e.getMessage(), e);
		}
	}
	
	/**
	 * 输入流形式.<br>
	 * 操作Excel工作簿.<br>
	 * @param is Excel输入流,比如上传
	 * @throws IOException 
	 * */
	public void readExcelOfInputStream(InputStream is) throws IOException{
		Workbook book = null;
		try {
			book = Workbook.getWorkbook(is);
			readExcel(book);
		} catch (BiffException e) {
			LOG.info("读取Excel工作簿文件二进制文件交换格式异常:" + e.getMessage(), e);
		} catch (IOException e) {
			LOG.info("读取Excel工作簿文件输入输出流异常:" + e.getMessage(), e);
		}finally{
			is.close();
		}
	}
	
	//测试
	public static void main(String[] args) {
		RWExcelFile_jxl jxlrw1 = new RWExcelFile_jxl();
		//读取
		//单元格格式--此处都为"文本"
		String excelPath = "D:/RWExcelFile_jxl.xls";
		File excel = new File(excelPath);
		jxlrw1.readExcelOfFile(excel);
		//导出
		jxlrw1.writeExcel();
		//编辑
		jxlrw1.editExcel();
	}
}
测试结果:
第一次导出:


底部:


编辑:


底部:


读取:


底部:


读取结果:

15:58:47.810 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - Excel工作簿的sheet页总数:5页.
15:58:47.813 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第1页读取开始……
15:58:47.870 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第1页名称:批量注册.
15:58:47.870 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第1页实际行总数:10行.
15:58:47.871 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第1页实际列总数:5列.
15:58:47.871 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第1列(类型:Label)]:姓名
15:58:47.871 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第2列(类型:Label)]:手机号
15:58:47.872 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第3列(类型:Label)]:执证号
15:58:47.872 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第4列(类型:Empty)]:
15:58:47.872 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第5列(类型:Empty)]:
15:58:47.872 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第1列(类型:Label)]:本兮
15:58:47.872 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第2列(类型:Number)]:15500005550
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第3列(类型:Number)]:44556600000
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第4列(类型:Empty)]:
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第5列(类型:Empty)]:
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第1列(类型:Label)]:童可可
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第2列(类型:Number)]:15500005551
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第3列(类型:Number)]:44556600001
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第4列(类型:Empty)]:
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第5列(类型:Empty)]:
15:58:47.873 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第1列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第2列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第3列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第4列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第5列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第1列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第2列(类型:Label)]:true
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第3列(类型:Label)]:2015-12-31 09:50:55
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第4列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第5列(类型:Empty)]:
15:58:47.874 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第1列(类型:Empty)]:
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第2列(类型:Empty)]:
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第3列(类型:Empty)]:
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第4列(类型:Empty)]:
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第5列(类型:Label)]:测试总列数
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第1列(类型:Label)]:@#$%^&*B11
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第2列(类型:Label)]:AAAAaaaa
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第3列(类型:Empty)]:
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第4列(类型:Empty)]:
15:58:47.875 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第5列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第1列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第2列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第3列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第4列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第5列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第1列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第2列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第3列(类型:Empty)]:
15:58:47.876 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第4列(类型:Empty)]:
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第5列(类型:Empty)]:
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第1列(类型:Empty)]:
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第2列(类型:Empty)]:
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第3列(类型:Label)]:测试总行数
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第4列(类型:Empty)]:
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第5列(类型:Empty)]:
15:58:47.877 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第2页读取开始……
15:58:47.935 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第2页名称:Sheet1.
15:58:47.935 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第2页实际行总数:0行.
15:58:47.935 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第2页实际列总数:0列.
15:58:47.935 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第3页读取开始……
15:58:47.980 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第3页名称:Sheet2.
15:58:47.980 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第3页实际行总数:0行.
15:58:47.980 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第3页实际列总数:0列.
15:58:47.980 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第4页读取开始……
15:58:48.017 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第4页名称:Sheet3.
15:58:48.017 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第4页实际行总数:0行.
15:58:48.017 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第4页实际列总数:0列.
15:58:48.017 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第5页读取开始……
15:58:48.057 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第5页名称:Sheet4.
15:58:48.057 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第5页实际行总数:0行.
15:58:48.057 [main] INFO  my.demo.java.z.file.ExcelFile_jxl - 第5页实际列总数:0列.


目录
相关文章
|
27天前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
121 1
|
4月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
235 14
|
4月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
4月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
105 0
|
4月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
252 0
|
5月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
424 5
|
6月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
215 10
|
5月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
294 0
|
8月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
9月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
981 5