依赖包下ダウンロード: http://xiazai.VeVB.COm/201407/tools/java-excel-dependency(VeVB.COm).rar
Excelツール类ExcelUtil.javaソースコード:
パッケージ com.itjh.javaUtil;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.DecimalFormat;import java.util.LinkedList;import java.util.List;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRichTextString;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.openxml4j.Exceptions.InvalidFormatException;import org.apache.poi.ss.usermodel.Cell ;インポート org.apache.poi.ss.usermodel.DateUtil;インポートorg.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.usermodel.WorkbookFactory ;/** * Excel の操作をパッケージ化します。これには、Excel の本文とストリーム出力 Excel、supportoffice が含まれます。 <br/> * poi-3.9-20121203.jar、poi-ooxml-3.9-20121203.jar、poi-ooxml-schemas-3.9- * 20121203.jar、dom4j-1.6.1.jar に依存します。<br/> > *有参造関数パラメータパラメータは Excel の全路径<br/> * * @author 宋立君 * @date 2014年07月03日 */public class ExcelUtil {// Excel文件路径private String path = "";// 書き込みExcel の場合、展開列の幅が自動的に内容に応じているかどうか。private boolean autoColumnWidth = false;/** * 構成関数はありません。默认 */public ExcelUtil() {}/** * 有参构造関数 * * @param path * Excel路径 */public ExcelUtil(String path) {this.path = path;}/** * 读取某个工作* * @paramsheetOrder * ワークディレクトリのシーケンス番号、0 から始まります。 * @return List<Object[]> すべての元格の値。 * @throws IOException * 追加excel文件IO 常。 * @throws FileNotFoundException * Excel文件無常。 * @throws InvalidFormatException * @author 宋立君 * @date 2014年07月03日日 */public List<Object[]> read(intsheetOrder) throws FileNotFoundException、IOException、InvalidFormatException {FileInputStream fis = new FileInputStream(path);Workbook workbook = WorkbookFactory.create(fis);if (fis != null) {fis.close();}Sheet シート = workbook.getSheetAt(sheetOrder); // 用来记录excel值List<Object[]> valueList = new LinkedList<Object[]>();// 循環遍歴一行、一列。for (Row row :sheet) {// 一行Object[] rowObject = null;for (Cell cell : row) {// cell。 getCellType はセルの表面に保存される値を取得するタイプスイッチ (cell.getCellType()) {case Cell.CELL_TYPE_BOOLEAN:// Boolean オブジェクトを取得する方法rowObject = CollectionUtil.addObjectToArray(rowObject,cell.getBooleanCellValue());break;case Cell.CELL_TYPE_NUMERIC:// 先見かどうか日期格式 if (DateUtil.isCellDateFormatted(cell)) {// 读取日期格式rowObject = CollectionUtil.addObjectToArray(rowObject,cell.getDateCellValue());} else {DecimalFormat df = new DecimalFormat();// 单元格的值,代替换掉,String value = df.format(cell.getNumericCellValue()).replace( ",", "");// 读取数字rowObject = CollectionUtil.addObjectToArray(rowObject,value);}break;case Cell.CELL_TYPE_FORMULA:// 读取公式rowObject = CollectionUtil.addObjectToArray(rowObject,cell.getCellFormula());break;case Cell.CELL_TYPE_STRING:// 读取StringrowObject = CollectionUtil.addObjectToArray(rowObject, cell.getRichStringCellValue().toString());break;}} // これをリストに追加します。valueList.add(rowObject);}return valueList;}/** * 特定のワークディレクトリ上の特定のアイテムを取得します* * @paramsheetOrder * ワークディレクトリの順序番号、0 から始まります。 * @param colum * 列数* @author 宋立君 * @date 2014年07月03日 */public String read(int SheetOrder、int colum、int row) が例外をスローします {FileInputStream fis = new FileInputStream(path);Workbook workbook = WorkbookFactory.create(fis);if (fis != null) {fis.close();}シート Sheet = workbook.getSheetAt(sheetOrder);Row rows =sheet.getRow(row - 1) );セル cell = rows.getCell(colum - 1);文字列コンテンツ = cell.getStringCellValue();return content;}/** * * * @paramsheetOrder * 0 を基にしたワークブックの順序番号。 * @param colum * 列ベース 1 * @param row * 行ベース 1 * @param content * 要被写要内容。 * @throws Exception * 书写後保存常。 * @author 宋立君 * @date 2014年07月03日*/public void write(intsheetOrder, int colum, int row, String content)throws 例外{FileInputStream fis = new FileInputStream(path);Workbook workbook = WorkbookFactory.create(fis);if (fis != null) {fis.close();}シート シート = workbook.getSheetAt(sheetOrder);行行 = シート。 createRow(row - 1);セル cell = rows.createCell(colum - 1);cell.setCellValue(content);FileOutputStream fileOut = new FileOutputStream(path);workbook.write(fileOut);fileOut.close();}/** * 一工作区最終後一条记录の序番号を取得し、これに相当します。 * * @paramsheetOrder * 工作区シーケンス番号 * @return int シーケンス番号。 * @throws IOException * 依存excel路径追加excel异常。 * @throws InvalidFormatException * @author 宋立君 * @date 2014年07月03日 */public int getSheetLastRowNum(int SheetOrder) throws IOException,InvalidFormatException {FileInputStream fis = new FileInputStream(path);Workbookワークブック = WorkbookFactory.create(fis);if (fis != null) {fis.close();}Sheetsheet = workbook.getSheetAt(sheetOrder);returnsheet.getLastRowNum();}/** * 在磁盘生成一个内容的excel,路径はパスプロパティ * * @param シート名 * 出たシート名 * @param フィールド名 * 列名数組 * @param data * 数据组 * @throws IOException * @author 宋立君 * @date 2014年07月03日 */public void makeExcel(StringsheetName, String[] fieldName,List<Object[]> data) throws IOException {//内存中生成工作薄HSSFWorkbook workbook = makeWorkBook(sheetName, fieldName, data);//截取文件夹路径String filePath = path.substring(0, path.lastIndexOf("//"));// 結果径路が存在しない場合,创建路径File file = new File(filePath);// System.out.println( path+"----------"+file.exists());if (!file.exists())file.mkdirs();FileOutputStream fileOut = new FileOutputStream(path);workbook.write(fileOut);fileOut.close();}/** * 出力ストリーム中に出力excel。 * * @param ExcelName * 出力されるexcel名 拡張名を含む * @param SheetName * 出力されたシート名 * @param fieldName * 列名数群 * @param data * データ群 * @param response * response * @throws IOException * 转换流時IO错误 * @author 宋立君 * @date 2014年07月03日 */public void makeStreamExcel(String ExcelName, String SheetName,String[] fieldName, List<Object[]> data, HttpServletResponse 応答) が IOException をスローする {OutputStream os = null;response.reset(); // 清空输出流os = response.getOutputStream(); // 取得出流response.setHeader("Content-disposition", "attachment; filename="+ new String(excelName.getBytes(), "ISO-8859-1")); // 設定出力文件応答response.setContentType("application/msexcel"); // 定义出力型// 内部存在中に作業薄HSSFWorkbook workbook を生成 = makeWorkBook(sheetName, fieldName, data);os.flush();workbook.write(os);}/** * 条件に応じて、作業薄对オブジェクトを生成* * @paramsheetName * ワークテーブルオブジェクト名 * @param fieldName * 首列名 * @param data *データベース * @return HSSFWorkbook * @author 宋立君 * @date 2014年07月03日 */private HSSFWorkbook makeWorkBook(StringsheetName, String[] fieldName,List<Object[]> data) {// 用来记录最大列宽, Integercollength[] = new Integer[fieldName.length];//生成工作表对オブジェクトHSSFWorkbook workbook = new HSSFWorkbook();// 生成工作表对オブジェクトHSSFSheet Sheet = workbook.createSheet();// 為了工作表能支持中文,设置字符集或UTF_16workbook.setSheetName(0,sheetName);/ / 产生一行HSSF行行 = Sheet.createRow(0);// 要素単位 HSSFCell cell を生成します;// 各フィールドの名前を書き込みますfor (int i = 0; i < fieldName.length; i++) {// 最初の各フィールド名の要素を書き込みます格cell = row.createCell((short) i);//設定元枠の内容は文字列型cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 設定元枠内で中国語を入力できるようにするため、設定文字集はUTF_16// cell.setEncoding(HSSFCell.ENCODING_UTF_16);//初期化列宽collength[i] = fieldName[i].getBytes().length;}// 一時元格内容String tempCellContent = "";//書き込み各条记录、每条记录对应excel表中の一行for (int i = 0; i < data.size(); i++) {Object[] tmp = data.get(i);// 一行生成 =sheet.createRow(i + 1);for (int j = 0; j < tmp.length; j++) {cell = row. createCell((short) j);//設定要素の型は Stringcell.setCellType(HSSFCell.CELL_TYPE_STRING);tempCellContent = (tmp[j] == null) ? "" : tmp[j].toString();cell.setCellValue(new HSSFRichTextString(tempCellContent));// 結果として自動調整されます。if (autoColumnWidth) {if (j >= collength.length) { // 列数値がデータ列の時間よりも小さいです。collength = CollectionUtil.addObjectToArray(collength,tempCellContent.getBytes().length);} else {// このコンテンツのサイズが以前の最大値より大きい場合は、この設定に従います。if (collength[j] < tempCellContent.getBytes().length ) {collength[j] = tempCellContent.getBytes().length;}}}}} // 自動整列列の最大値。if (autoColumnWidth) {// 整列はこの列文字に対する最大値です。for (int i = 0; i < fieldName.length ; i++) {sheet.setColumnWidth(i,collength[i] * 2 * 256);}}return workbook;}/** * 機能: 書き込み Excel を設定するとき、自動展開リストのサイズがコンテンツに適合するかどうか、false と認められます。 * * @author 宋立君 * @date 2014年07月03日 * @param autoColumnWidth * true または false */public void setAutoColumnWidth(boolean autoColumnWidth) {this.autoColumnWidth = autoColumnWidth;}}