poi对excel的基本读写操作
最近简单的弄了下poi对excel的应用,为方便自己以后的使用就把一些基本操作记录下来,其他更复杂的操作可以等以后有需求的时候再来深入了解一番!
写操作:
- /**
- *
- * 层次结构就是workbook-->Sheet-->Row-->Cell
- * 只要按照这种层次结构操作就不会有什么大的问题
- * @author Administrator
- *
- */
- public class Test1 {
- public static void main(String args[]) throws IOException {
- //HSSFWorkbook对应的是2003
- //XSSFWorkbook对应的是2007
- //对于03和07它们的操作都是差不多的,只是在需要用07的时候把相应的HSSF前缀改成XSSF前缀就可以了
- //第一步建一个工作簿,即workbook
- Workbook workbook = new HSSFWorkbook();
- //第二步建一个工作表单,急sheet
- Sheet sheet = workbook.createSheet("mysheet1");
- for (int i=0;i<5;i++) {
- //有了表单以后就是行Row了,
- Row row = sheet.createRow(i);
- for (int j=0;j<5;j++) {
- //有了row以后就是row上的一个个小的单元格了
- Cell cell = row.createCell(j);
- //给单元格添加内容
- cell.setCellValue("row"+(i+1)+",column"+(j+1));
- }
- }
- //建一个用于存放新建的excel的文件输出流
- OutputStream os = new FileOutputStream("file/test1.xls");
- //把形成的workbook写到一个输出流里面
- workbook.write(os);
- os.close();
- }
- }
读操作:
- public class Test4 {
- public static void main(String args[]) throws IOException {
- InputStream is = new FileInputStream("file/test1.xls");
- Workbook wb = new HSSFWorkbook(is);
- Sheet sheet = wb.getSheetAt(0);
- // 因为Row,Cell,Sheet都继承了java.lang.Iterator接口,所以可以用下面的方法来进行遍历
- for (Row row : sheet) {
- for (Cell cell : row) {
- int cellType = cell.getCellType();
- switch (cellType) {
- //在取数据的时候类型一定要取对,否则将抛出异常
- case Cell.CELL_TYPE_STRING:
- String str = cell.getRichStringCellValue().getString();
- System.out.println(str);// 对取得的数据的简单处理;
- break;
- case Cell.CELL_TYPE_BLANK:
- if (DateUtil.isCellDateFormatted(cell)) {
- System.out.println(cell.getDateCellValue());
- } else {
- System.out.println(cell.getNumericCellValue());
- }
- break;
- case Cell.CELL_TYPE_FORMULA:
- System.out.println(cell.getCellFormula());
- break;
- case Cell.CELL_TYPE_BOOLEAN:
- System.out.println(cell.getBooleanCellValue());
- break;
- default:
- System.out.println("---------------------");
- break;
- }
- }
- }
- //当然还可以这样来遍历
- //row是从1开始的,cell是从头0开始的,但是在创建的时候它们都是0-based;
- for (int i=0;i<sheet.getLastRowNum()+1;i++) {
- Row row = sheet.getRow(i);
- if (row==null)
- continue;
- for (int j=0;j<row.getLastCellNum();j++) {
- Cell cell = row.getCell(j);
- if (cell==null)
- continue;
- //在取数据的时候数据类型一定要取对,否则将抛出异常,like NumberFormatException
- System.out.println(cell.getStringCellValue());
- }
- }
- is.close();
- }
- }
合并单元格:
- public static void main(String args[]) throws IOException {
- Workbook wb = new HSSFWorkbook();
- Sheet sheet = wb.createSheet("sheet1");
- Row row = sheet.createRow(1);
- Cell cell = row.createCell(1);
- cell.setCellValue("a test of merge!");
- //执行合并操作的语句
- sheet.addMergedRegion(new CellRangeAddress(
- 1,// 开始行
- 1,// 结束行
- 1,// 开始列
- 3// 结束列
- ));
- OutputStream os = new FileOutputStream("file/test3.xls");
- wb.write(os);
- os.close();
- }
换行:
- public static void main(String args[]) throws IOException {
- Workbook wb = new HSSFWorkbook();
- Sheet sheet = wb.createSheet();
- Row row = sheet.createRow(6);
- sheet.autoSizeColumn(2);
- for (int i=0;i<5;i++) {
- Cell cell = row.createCell(i+2);
- CellStyle style = wb.createCellStyle();
- //to set cell newLine should set its wrap true
- style.setWrapText(true);
- //利用\n来实现换行操作,只有在Cell设置为setWrapText(true)的时候才能实现人为的换行
- cell.setCellValue("just use \n to wrap in a cell!");
- cell.setCellStyle(style);
- }
- OutputStream os = new FileOutputStream("file/test6_newLine.xls");
- wb.write(os);
- os.close();
- System.out.println("----------------------------");
- }
画图:
- //drawing shapes
- /*
- * To create a shape you have to go through the following steps:
- 1.Create the patriarch.
- 2.Create an anchor to position the shape on the sheet.
- 3.Ask the patriarch to create the shape.
- 4.Set the shape type (line, oval, rectangle etc...)
- 5.Set any other style details converning the shape. (eg: line thickness, etc...)
- */
- HSSFPatriarch partriarch = (HSSFPatriarch) sheet5.createDrawingPatriarch();
- HSSFSimpleShape shape = partriarch.createSimpleShape(new HSSFClientAnchor(0,0,0,0,(short)3,3,(short)5,5));
- shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);
- //shape可以设置很多的属性
- shape.setFillColor(255,200,200);
- shape.setLineStyle(HSSFSimpleShape.LINESTYLE_DASHGEL);
- //Text boxes are created using a different call:
poi对excel的基本读写操作的更多相关文章
- java封装实现Excel建表读写操作
对 Excel 进行读写操作是生产环境下常见的业务,网上搜索的实现方式都是基于POI和JXL第三方框架,但都不是很全面.小编由于这两天刚好需要用到,于是就参考手写了一个封装操作工具,基本涵盖了Exce ...
- Python Excel文件的读写操作(xlwt xlrd xlsxwriter)
转:https://www.cnblogs.com/ultimateWorld/p/8309197.html Python语法简洁清晰,作为工作中常用的开发语言还是很强大的(废话). python关于 ...
- [python]使用xlrd对Excel表格进行读写操作
2.1 导入模块 import xlrd 2.2 打开Excel文件读取数据 data = xlrd.open_workbook("excelFile.xls") 2.3 使用技巧 ...
- pandas对Excel文件的读写操作
1.将Excel数据读为dataframe 1.1 直接读取 df = pd.read_excel('data.xlsx') 1.2 根据sheet索引 xls = pd.ExcelFile('dat ...
- python对excel文件的读写操作
import xlrd,xlwt data = xlrd.open_workbook('a.xlsx') #读 table = data.sheets()[0] data_list = [] data ...
- spring boot 使用 POI 读取Excel文件
内容简介 本文主要介绍使用POI进行Excel文件的相关操作,涉及读取文件,获取sheet表格,对单元格内容进行读写操作,以及合并单元格的操作. Excel文件目录 Excel模板文件存了resour ...
- python读取数据写入excel的四种操作
Python对Excel的读写主要有:xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种 xlutils结合xlrd: 操作的是以xls后缀的excel,读取文件保留原格式 ...
- 使用POI来实现对Excel的读写操作
事实上我感觉直接贴代码就好了.代码里面差点儿做到每一行一个凝视.应该看起来会比較简单 代码托管在github上:https://github.com/chsj1/ExcelUtils package ...
- Java学习---Excel读写操作
1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...
随机推荐
- ubantu 安装杀毒软件 clamav
前言: 搜索了一番安装杀毒软件的教程, 但是多有残缺不全的, 所以整理一下,以作记录 1. 添加用户 groupadd clamav useradd -g clamav -s /bin/false - ...
- Django学习(5)优雅地分页展示网页
在我们平时浏览网页时,经常会遇到网页里条目很多的情形,这时就会用到分页展示的功能.那么,在Django中,是如何实现网页分类的功能的呢?答案是Paginator类. 本次分享讲具体展示如何利用Djan ...
- MVC分部视图@Html.Partial
加载分布视图的方式: //1.以视图名使用当前文件夹下的视图(如果没有找到,则搜索 Shared 文件夹) @Html.Partial("_test") //加载对应文件 /Vie ...
- Oracle入门《Oracle介绍》第一章1-2 Oracle 实例
Oracle实例:是后台进程和内存结构的集合 一.内存结构 1.Oracle 实例启动时分配系统全局区 a.数据库信息存储于SGA,由多个数据库进程共享 1.共享池是对SQL.PL/SQL程序进行语法 ...
- .net dll反编译出现的问题,以及部分修复的方法
常用.net反编译工具 1.Reflector 9.0.2 2.JustDecompile2015.3.928.0j 3.ILSpy 4.CS资源文件批量转换工具 base.AutoScaleMode ...
- 列表与for循环
一.list列表 1.概述 变量:使用变量存储数据,但是,有一个缺点:一个变量每次只能存储一个数据 #需求:存储5个人的年龄,求他们的平均年龄 age1 = 29 age2 = 36 age3 = 3 ...
- Linux常用基本命令:三剑客命令之-awk内置变量与自定义变量
AWK中,变量分为两种:内置变量与自定义变量. 常见的内置变量有: FS:输入字段分隔符, 默认为空白字符 OFS:输出字段分隔符, 默认为空白字符 RS:输入记录分隔符(输入换行符), 指定输入时的 ...
- 2017-07-20 在Maven Central发布中文API的Java库
知乎原链 相关问题: 哪些Java库有中文命名的API? 且记下随想. 之前没有发布过, 看了SO上的推荐:Publish a library to maven repositories 决定在son ...
- Apex 的异常处理
Apex 中的异常处理 在 Apex 中,和其他语言类似,对于异常处理通常使用 try.catch.finally.throw 等关键字. 对于每一个 try 代码段,必须要有至少一个 catch 或 ...
- ssms2014和ssms2016版本错误定位的区别
偶尔对比起2016以下的版本(比如ssms2014),ssms2016有一个小地方有区别.就是报错的行号有区别 举个例子,下面同样的语句在ssms2014和ssms2016里面运行.就是如下的效果 C ...