前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel表格的写入读取

Excel表格的写入读取

作者头像
爱撒谎的男孩
发布2019-12-31 14:45:14
1.3K0
发布2019-12-31 14:45:14
举报
文章被收录于专栏:码猿技术专栏

文章目录

  1. 1. Excel的读取和写入
    1. 1.1. 准备
    2. 1.2. 简介
    3. 1.3. 工作簿
      1. 1.3.1. 构造方法
      2. 1.3.2. 常用的方法
      3. 1.3.3. 例子
        1. 1.3.3.1. 读取文件的例子
        2. 1.3.3.2. 写入文件的例子
    4. 1.4. 工作表(sheet)
      1. 1.4.1. 常用方法
      2. 1.4.2. 例子
        1. 1.4.2.1. 合并单元格
        2. 1.4.2.2. 创建一行
    5. 1.5. 行
      1. 1.5.1. 常用的方法
    6. 1.6. 列
      1. 1.6.1. 常用的单元格类型
      2. 1.6.2. 常用的方法
    7. 1.7. 设置单元格样式
      1. 1.7.1. 常用的方法
    8. 1.8. 单元格字体的设置
      1. 1.8.1. 常用的方法:
    9. 1.9. 写入文件
    10. 1.10. 写入文件
    11. 1.11. 参考文章

Excel的读取和写入

准备

首先需要导入jar包,请点击这里下载

简介

我们知道Excel表格在2007之后就不一样了,后缀名变为xlsx,之前的后缀名为xls,因此读取和写入的操作就对应着不同的方式,但是只是读取和写入的类不同了,思想还是一样的。 我们要知道一个Excel文件(工作簿)包含三部分,分别是工作表(sheet),行(row),列(cell)

工作簿

工作簿对应的类是 XSSFWorkbook(2007之后),在2007之前对应的类是HSSFWorkbook

构造方法

new XSSFWorkbook() 创建一个工作簿用于写入文件 new XSSFWorkbook(java.io.InputStream inputstream) 创建一个工作簿,用于读取文件

常用的方法

  • XSSFFont createFont() 返回一个XSSFont类的对象,主要用于设置字体用的
  • XSSFSheet createSheet() 创建一个工作表
  • XSSFSheet createSheet(String name) 创建一个工作表并且指定姓名
  • XSSFCellStyle createCellStyle() 创建一个单元格风格类的一个对象,便于设置单元格的属性
  • write(OutputStream out) 用于将文件写入到文件中
  • close()
  • setSheetName(int sheetIx,String name) 为指定索引的工作表设置名称
  • XSSFSheet getSheetAt(int index) 获取指定索引的工作表对象,这个是用来读取文件的时候用的

例子

读取文件的例子
代码语言:javascript
复制
  File file = new File("F:\\demo1.xlsx");
//创建输入流
FileInputStream inputStream = new FileInputStream(file);
//创建工作簿读取
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
写入文件的例子
代码语言:javascript
复制
XSSFWorkbook book=new XSSFWorkbook();  //创建工作簿

.....省略写入的内容

FileOutputStream out=new FileOutputStream("D:\\demo1.xlsx");  //创建输出流

book.write(out);     //写入到指定的文件

book.close(); // 关闭
out.close();

工作表(sheet)

工作表对应的类为XSSFSheet,2007之前对应的是HSSFSheet 一般工作表都是在工作簿基础上创建的,因此构造函数也用不到,所以这里就不多说了

常用方法

  • int addMergedRegion(CellRangeAddress region) 合并单元格
  • XSSFRow createRow(int rownum) 创建一个行 rownum表示创建第几行,这是一个行的索引(0开始) 便于写入
  • XSSFRow getRow(int index) 获取指定索引的那一行,便于读取
  • int getLastRowNum() 获取文件中最后一行的索引,这个通常在读取的时候用到
  • int getFirsetRowNum() 获取文件第一行的索引

例子

合并单元格
代码语言:javascript
复制
// 创建工作簿对象
		XSSFWorkbook workbook = new HSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("第一张表");   //创建工作表对象

        //合并单元格    CellRangeAddress cell=new CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) 
        //这里表示合并第一行的1-10列
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 10));
创建一行
代码语言:javascript
复制
XSSFWorkbook workbook = new HSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("第一张表");   //创建工作表对象
XSSFRow row=sheet.createRow(0);   //创建第一行

行对应的类为XSFFRow,2007之前对应的是HSSFRow

常用的方法

  • XSSFCell createCell(int columnIndex) 创建一列 columnIndex表示列的索引(0开始)
  • short getFirstCellNum() 返回文件中第一个列的索引,便于以后读取
  • short getLastCellNum() 返回全部的列数(不是索引),这个和Sheet中getRowNum()方法不同,便于以后读取文件
  • XSSFCell getCell(int cellnum) 获取指定索引的那一列,便于以后的读取
  • XSSCellStyle getCellStyle() 获取单元格风格的对象
  • void setCellStyle(XSSFCellStyle style) 将设置的风格样式添加到单元格中,否则将不会起作用

列对应的类为XSSFCell,2007之前对应的是HSSFCell

常用的单元格类型

常用的单元格的类型有字符串,数字,布尔值,空值,可以使用XSSFCellint getCellType() 方法获取类型

  • CELL_TYPE_BLANK 空值
  • CELL_TYPE_STRING 字符串
  • CELL_TYPE_NUMERIC 数字(浮点值,整型)
  • CELL_TYPE_BOOLEAN 布尔值(True,FALSE)

常用的方法

  • int getCellType()获取单元格类型 可以和常用的单元格类型进行比较,然后使用不同的读取方法读取
  • XSSFCellStyle getCellStyle() 获取单元格风格对象,便于后面设置单元格的风格
  • setCellValue(Object value) 设置单元格的内容,可以是任意类型的
  • java.util.Date getDateCellValue() 读取单元格的日期内容
  • String getStringCellValue() 读取单元格中的字符串内容
  • double getNumericCellValue() 读取单元格中的数字类型的内容
  • boolean getBooleanCellValue() 获取单元格中的布尔类型的内容

设置单元格样式

对应的类为XSSFCellStyle

常用的方法

  • void setAlignment(HorizontalAlignment align) 设置水平对齐方式
  • void setVerticalAlignment(VerticalAlignment align) 设置垂直的对齐方式
  • void setTopBorderColor(XSSFColor color) 设置上边框的颜色(还有Left,right..)
  • void setFont(Font font) 设置字体 这里的Font是org.apache.poi.ss.usermodel.Font
  • void setBorderTop(BorderStyle border) 设置上边框的样式,在BorderStyle类中有很多的样式
  • void setRotation(short rotation) 设置文字的旋转度数

单元格字体的设置

对应的类为XSSFFont

常用的方法:

  • void setBold(boolean bold) 是否设置加粗
  • void setItalic(boolean italic) 设置是否倾斜
  • void setUnderline(FontUnderline underline) 设置下划线
  • void setStrikeout(boolean strikeout) 设置是否带有删除线
  • void setColor(XSSFColor color) 设置字体的颜色,只需要调用XSSFColor静态颜色变量即可
  • void setFontHeight(double height) 设置字体高度
  • void setFontHeightInPoints(short height) 设置字号
  • void setFontName(java.lang.String name) 设置字体样式(黑体,楷体…)

写入文件

代码语言:javascript
复制
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.FontUnderline;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class TestDemo {
	public static void main(String[] args) throws IOException {
		XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作簿
		XSSFSheet sheet = workbook.createSheet("第一个工作表"); // 创建一个工作表
		XSSFCellStyle style = workbook.createCellStyle(); // 创建单元格风格对象
		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 10)); // 合并第一行的单元格
		style.setAlignment(HorizontalAlignment.CENTER); // 设置水平居中
		style.setVerticalAlignment(VerticalAlignment.CENTER); // 设置垂直居中

		XSSFFont font = workbook.createFont(); // 创建字体的对象
		font.setFontName("黑体"); // 设置字体的样式为黑体
		font.setFontHeightInPoints((short) 20); // 设置字体的大小
		font.setBold(true); // 设置粗体
		font.setItalic(true); // 设置倾斜
		font.setColor(HSSFColor.RED.index); // 设置字体的颜色
		font.setUnderline(FontUnderline.SINGLE); // 设置下划线
		font.setStrikeout(false); // 设置不带下划线

		style.setFont(font); // 将设置的字体添加到单元格样式中,显示出来

		XSSFRow row1 = sheet.createRow(0); // 创建第一个行
		XSSFCell cell1 = row1.createCell(0); // 创建第一行的第一列
		cell1.setCellStyle(style); // 将上面定义的风格设置到这个单元格中,这个是必须有的,否则根本不起作用
		cell1.setCellValue("员工信息表"); // 设置单元格的内容

		// 设置第二行的前三列的值
		XSSFRow row2 = sheet.createRow(1);
		row2.createCell(0).setCellValue("姓名");
		row2.createCell(1).setCellValue("性别");
		row2.createCell(2).setCellValue("年龄");

		// 设置第三行的前三列
		XSSFRow row3 = sheet.createRow(2);
		row3.createCell(0).setCellValue("陈加兵");
		row3.createCell(1).setCellValue("男");
		row3.createCell(2).setCellValue(22); // 设置数字

		// 设置第四行的前三列
		XSSFRow row4 = sheet.createRow(3);
		row4.createCell(0).setCellValue("郑元梅");
		row4.createCell(1).setCellValue("女");
		row4.createCell(2).setCellValue(22); // 设置数字

		// 创建输出流对象
		FileOutputStream stream = new FileOutputStream(new File(
				"F:\\demo2.xlsx"));
		workbook.write(stream); // 写入文件
		workbook.close(); // 关闭
		stream.close();
	}

}

写入文件

代码语言:javascript
复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class TestDemo1 {
	public static void main(String[] args) throws IOException {
		File file = new File("F:\\demo2.xlsx");
		FileInputStream inputStream = new FileInputStream(file); // 创建输入流
		XSSFWorkbook workbook = new XSSFWorkbook(inputStream); // 创建读取工作簿的对象
		XSSFSheet sheet = workbook.getSheetAt(0); // 获取第一个工作表的对象

		// 第一次循环取得所有的行的对象 getLastRowNum()是得到最后一行的索引
		for (int i = 0; i <= sheet.getLastRowNum(); i++) {
			XSSFRow row = sheet.getRow(i); // 获取每一行的对象
			for (int j = 0; j < row.getLastCellNum(); j++) {
				XSSFCell cell = row.getCell(j); // 获取每一行的每一列
				int type = cell.getCellType(); // 获取每一个单元格对应的类型
				switch (type) {
				case XSSFCell.CELL_TYPE_BOOLEAN:   //如果是布尔类型
					boolean b=cell.getBooleanCellValue();
					System.out.print(b + "    ");
					break;
				case XSSFCell.CELL_TYPE_NUMERIC:  //如果是数字类型
					double d=cell.getNumericCellValue();   //获取值
					System.out.print( d+ "    ");
					break;
				case XSSFCell.CELL_TYPE_STRING:  //如果是字符串类型的
					String s=cell.getStringCellValue();
					System.out.print( s+ "   ");   
				case XSSFCell.CELL_TYPE_BLANK:   //如果是空值
					System.out.print("      ");
				default:
					break;
				}
			}
			System.out.println();
		}
		
		workbook.close();  //关闭
		inputStream.close();

	}

}

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Excel的读取和写入
    • 准备
      • 简介
        • 工作簿
          • 构造方法
          • 常用的方法
          • 例子
        • 工作表(sheet)
          • 常用方法
          • 例子
          • 常用的方法
          • 常用的单元格类型
          • 常用的方法
        • 设置单元格样式
          • 常用的方法
        • 单元格字体的设置
          • 常用的方法:
        • 写入文件
          • 写入文件
            • 参考文章
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档