Excel格式说明
1、Excel有xls、xlsx两种格式,推荐使用xlsx,因为没有行数限制。
2、整个Excel文件是一个Workbook,每个Workbook由多个Sheet组成,一个Sheet有多Row,一个Row有多个Cell。拿一个Excel文件去说明。
ExcelHelpers使用
1、看文档研究ExcelHelpers。它是对poi库的简单封装,更多功能看poi的文档。
2、注意的问题,如果使用公式的话,如果运行期间改变了数值,并且想得到计算后的单元格的值,需要手动调用evaluateAllFormulas()。
3、演示:使用代码读取遍历一个Excel文件。
4、演示:使用代码创建一个Excel文件,填充一些数据,然后保存。
关闭Workbook
static org.apache.poi.ss.usermodel.CellStylecreateCellStyle(org.apache.poi.ss.usermodel.Cell cell)创建CellStyle对象
static org.apache.poi.xssf.usermodel.XSSFChartcreateChart(org.apache.poi.ss.usermodel.Sheet sheet, int col1, int row1, int col2, int row2)在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。
static org.apache.poi.xssf.usermodel.XSSFChartcreateChart(org.apache.poi.ss.usermodel.Sheet sheet, int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。
static org.apache.poi.hssf.usermodel.HSSFWorkbookcreateXLS()创建旧的2003格式(*.xls)的Excel文档Workbook对象。
static org.apache.poi.xssf.usermodel.XSSFWorkbookcreateXLSX()创建新格式(*.xlsx)的Excel文档Workbook对象。
static voidevaluateAllFormulas(org.apache.poi.ss.usermodel.Workbook wb)重新计算workbook这个表格中所有的公式。
static org.apache.poi.ss.usermodel.CellgetCell(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)得到sheet的第rowIndex行的第colIndex列的单元格。
static DoublegetCellDoublevalue(org.apache.poi.ss.usermodel.Cell cell)获得cell的Double类型的值,如果值是空的或者不存在这个单元格,则返回null。
static DoublegetCellDoublevalue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)获得sheet的第rowIndex行的第colIndex列的Double类型的值,如果值是空的或者不存在这个单元格,则返回null。
static IntegergetCellIntValue(org.apache.poi.ss.usermodel.Cell cell)获得cell的Integer类型的值,如果值是空的或者不存在这个单元格,则返回null。
static IntegergetCellIntValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)获得sheet的第rowIndex行的第colIndex列的Integer类型的值,如果值是空的或者不存在这个单元格,则返回null。
static java.time.LocalDateTimegetCellLocalDateTimevalue(org.apache.poi.ss.usermodel.Cell cell)获得cell的LocalDateTime类型的值,如果值是空的或者不存在这个单元格,则返回null。
static java.time.LocalDateTimegetCellLocalDateTimevalue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)获得sheet的第rowIndex行的第colIndex列的LocalDateTime类型的值,如果值是空的或者不存在这个单元格,则返回null。
static java.time.LocalDategetCellLocalDatevalue(org.apache.poi.ss.usermodel.Cell cell)获得cell的LocalDate类型的值,如果值是空的或者不存在这个单元格,则返回null。
static java.time.LocalDategetCellLocalDatevalue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)获得sheet的第rowIndex行的第colIndex列的LocalDate类型的值,如果值是空的或者不存在这个单元格,则返回null。
static StringgetCellStringValue(org.apache.poi.ss.usermodel.Cell cell)获得cell的String类型的值,如果值是空的或者不存在这个单元格,则返回null。
static StringgetCellStringValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex)获得sheet的第rowIndex行的第colIndex列的String类型的值,如果值是空的或者不存在这个单元格,则返回null。
static org.apache.poi.ss.usermodel.WorkbookopenFile(byte[] bytes)打开Excel文件,文件的内容是bytes,返回文档的Workbook对象。
static org.apache.poi.ss.usermodel.WorkbookopenFile(File file)打开Excel文件file,返回文档的Workbook对象。
static org.apache.poi.ss.usermodel.WorkbookopenFile(InputStream inStream)打开inStream代表的Excel文件,返回文档的Workbook对象。
static org.apache.poi.ss.usermodel.WorkbookopenFile(String filename)打开Excel文件filename,返回文档的Workbook对象。
static voidsaveToFile(org.apache.poi.ss.usermodel.Workbook workbook, File file)把workbook保存到文件file中。
static voidsaveToFile(org.apache.poi.ss.usermodel.Workbook workbook, String filename)把workbook保存到文件filename中。
static voidsetCellValue(org.apache.poi.ss.usermodel.Cell cell, Object value)设置cell的值,根据传入的value类型会自动设置单元格的cellStyle。
static voidsetCellValue(org.apache.poi.ss.usermodel.Sheet sheet, int rowIndex, int colIndex, Object value)设置sheet这个页的第rowIndex行的第colIndex列的值为value。
static byte[]toByteArray(org.apache.poi.ss.usermodel.Workbook workbook)把workbook生成为内容的字节数组
无论在界面上显示的是什么,编程都是从第零行第零列开始数的。
所以的数据类型都是继承与object类型的,因此传入String,int等类型都没事
package Part4;import com.yzk18.docs.ExcelHelpers;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;public class 遍历Excel文件1 { public static void main(String[] args) { Workbook workbook=ExcelHelpers.openFile("d:/temp/工作簿1.xlsx"); for (int sheetIndex=0;sheetIndex
遍历到有Null存在,出现了问题,DEbug一下
看它在表格的哪里
可能在Excel文件中有些空cell中存在数据,调试一下如果遇到null就跳过
又运到问题,sheet2打印不出来。继续找问题,Cannot invoke "org.apache.poi.ss.usermodel.Row.getFirstCellNum()" because "row" is null。它说我行是空。OK,那我就在行中加入,遇到null就跳过。
OK成功了
Excel遍历完整代码
package Part4;import com.yzk18.docs.ExcelHelpers;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;public class 遍历Excel文件1 { public static void main(String[] args) { Workbook workbook=ExcelHelpers.openFile("d:/temp/工作簿1.xlsx"); for (int sheetIndex=0;sheetIndex
创建Excel文件
代码
package Part4;import com.yzk18.docs.ExcelHelpers;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class 创建Excel文件1 { public static void main(String[] args) { XSSFWorkbook worbook = ExcelHelpers.createXLSX(); XSSFSheet sheet = worbook.createSheet(); ExcelHelpers.setCellValue(sheet,0,0,"姓名"); ExcelHelpers.setCellValue(sheet,0,1,"年龄"); ExcelHelpers.setCellValue(sheet,0,2,"手机号"); ExcelHelpers.setCellValue(sheet,1,0,"小明"); ExcelHelpers.setCellValue(sheet,1,1,18); ExcelHelpers.setCellValue(sheet,1,2,"18888888888888"); ExcelHelpers.setCellValue(sheet,2,0,"小红"); ExcelHelpers.setCellValue(sheet,2,1,19); ExcelHelpers.setCellValue(sheet,2,2,"139999999999999"); ExcelHelpers.saveToFile(worbook,"d:/temp/1.xlsx"); }}
效果