java的poi技术读写excel数据
来源:互联网 发布:宣传片配音软件 编辑:程序博客网 时间:2024/05/17 01:55
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MSWord和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
1、读excel表格,返回一个二维数组:
import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class ReadExcelFile { /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * @param file 读取数据的源Excel * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @param sheetIndex 读取数据的源Excel的表格序号,如sheetIndex=3,表示取得第3个表 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getDate(String filePath, int ignoreRows,int sheetIndex) throws IOException { File file = new File(filePath); List<String[]> result=new ArrayList<String[]>(); int rowSize=0; BufferedInputStream inputStream =new BufferedInputStream(new FileInputStream(file)); POIFSFileSystem fsFileSystem=new POIFSFileSystem(inputStream); HSSFWorkbook wb=new HSSFWorkbook(fsFileSystem); //System.out.println("nu"+wb.getNumberOfSheets()); HSSFCell cell=null; //读取每个表// for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++){ HSSFSheet st=wb.getSheetAt(sheetIndex-1); //第一行标题,暂时不取 for(int rowIndex=ignoreRows;rowIndex <= st.getLastRowNum(); rowIndex++){ HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } }// } inputStream.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray;} /** * 去掉字符串右边的空格 * @param str 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); }}
2、写入一个excel表格:
package cn.cz.excel;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Date;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFDataFormat;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFHyperlink;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.CellRangeAddress;import org.apache.poi.hssf.util.HSSFColor;public class WriteExcelFile { /** * @param cz * @throws IOException */ public static void WriteExcel(String[][] inputResult,String outFilePath) throws IOException { int rowLenth = inputResult.length; int columnLenth = inputResult[0].length; // 创建Excel的工作书册 Workbook,对应到一个excel文档 HSSFWorkbook wb = new HSSFWorkbook(); // 创建Excel的工作sheet,对应到一个excel文档的tab HSSFSheet sheet = wb.createSheet("sheet1"); // 设置相关基本属性 // 1、设置excel每列宽度 sheet.setColumnWidth(0, 4000); // /2、创建字体样式 HSSFFont font = wb.createFont(); font.setFontName("Verdana"); font.setBoldweight((short) 70); font.setFontHeight((short) 210); font.setColor(HSSFColor.BLACK.index); // 3、创建单元格样式 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index); //style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 4、设置边框 style.setBottomBorderColor(HSSFColor.RED.index); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setFont(font);// 设置字体 // 设置单元格内容格式 HSSFCellStyle style1 = wb.createCellStyle(); // style1.setDataFormat(HSSFDataFormat.getBuiltinFormat("h:mm:ss")); style1.setWrapText(true);// 自动换行 for (int i = 0; i < rowLenth; i++) { // 创建Excel的sheet的一行 HSSFRow row = sheet.createRow(i); row.setHeight((short) 500);// 设定行的高度 for (int j = 0; j < columnLenth; j++) { // 创建一个Excel的单元格 HSSFCell cell = row.createCell(j); // 设置单元格的样式格式 cell.setCellStyle(style1); // // 合并单元格(startRow,endRow,startColumn,endColumn) // sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 给Excel的单元格设置样式和赋值 //cell.setCellStyle(style); cell.setCellValue(inputResult[i][j]); } } // // 创建超链接 // HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL); // link.setAddress("http://www.baidu.com"); // cell = row.createCell(1); // cell.setCellValue("百度"); // cell.setHyperlink(link);// 设定单元格的链接 FileOutputStream os = new FileOutputStream(outFilePath); wb.write(os); os.close(); }}
0 0
- java的poi技术读写excel数据
- poi读写excel数据
- java的poi技术读取Excel数据到Mysql
- java的poi技术读取Excel数据到MySQL
- java的poi技术读取Excel数据到MySQL
- java的poi技术读取Excel数据到MySQL
- java的poi技术读取Excel数据到MySQL
- Java读写Excel-POI
- java poi读写excel
- JAVA POI读写excel
- java poi读写excel
- java poi 对excel的读写
- 使用POI读写excel数据
- java之poi操作excel-基本的excel读写操作
- POI之Java读写Excel
- Java:用POI读写Excel
- Java:用POI读写Excel
- java读写Excel(POI)
- SQL根据字符分割字符串的三种写法
- 我的Python学习之路之基本语法-列表和字典
- UI文件操作
- java swing 垂直流布局管理器实现
- 机器学习1
- java的poi技术读写excel数据
- C++学习之旅-结构struct
- sqlite3安装使用
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory AndroidStudio
- POJ 2528(并查集)
- NYOJ_1241_Distribution
- leetcode-09-Palindrome Number
- Java简介
- LightOj 1220 Fantasy of a Summation(快速幂)