使用Apache POI
我打算简单地解释一下关于POI的使用方法。
请参考下面的官方网站以获取详细信息,Apache POI。
创建工作簿
首先,需要创建一个工作簿作为操作的目标。
有一个注意事项,如果要读取现有的文件,需要先生成FileInputStream。
如果是写入操作,只需要在想要写入的时候生成FileOutputStream就可以了。
//書き込みの場合
Workbook workbook = new XSSFWorkbook();//xlsx、xlsmファイルの場合
//いろいろな処理
//出力先の生成
String filePath = "エクセルファイル.xlsx"
tyr(FileOutputStream output = new FileOutputStream(filePash)){
//書き込み
workbook.write(output);
}
//読み込みの場合
//入力元の生成
String filePath = "エクセルファイル.xlsx"
tyr(FileInputStream input = new FileInputStream(filePash)){
//workbookの生成
Workbook workbook = WorkbookFactory.create(input);
//いろいろな処理
}
如果您想操作旧的xls文件等,请使用HSSFWorkbook而不是XSSFWorkbook来生成workbook。
使用工作簿生成实例的主要操作将在此之后进行。
新建一个表格
创建要处理的工作表,当写入时,使用createSheet函数生成工作表,当读取时,使用getSheet或getSheetAt函数生成工作表。
//書き込みの場合
Sheet sheet = workbook.createSheet("シート名");
//読み込みの場合
Sheet sheet = workbook.getSheetAt(0);//0番目のシートを取得
//または
Sheet sheet = workbook.getSheet("シート名")//シート名がわかっている場合はこちらで
在实际书写和阅读字符时,我们将使用我们所创建的表格来生成一个独立的实例。
创建一行
在POI中,仅创建表格不添加内容就会变成空白的形象。
因此,需要生成行来填充内容。
//書き込みの場合
Row row = sheet.createRow(0);//0行目を生成(行は0行目から数える)
//読み込みの場合
Row row = sheet.getRow(0);//0行目を読み取り
作为注意点,需要提前生成行,这是必须的。
用法是在某个地方确定最大行数,然后生成那么多的行。
创建单元格
每行生成一个单元格。
无行则无法生成单元格。
//書き込みの場合
Cell cell = row.createCell(0);
//読み込みの場合
Cell cell = row.getCell(0);
文字、颜色、字体等将在该单元格中进行设置。
操作文字
只要能做到这一步,后面就容易了。
//書き込みの場合
cell.setCellValue("あいうえお");
//読み込みの場合
String cellValue = cell.getStringCellValue();
在读取时,可以使用getxxxCellValue方法。
xxx可以指定数据类型。
进行字体设置
由于字体是workbook的属性,所以需要从workbook中生成。
需要注意的是,如果错误理解字体的作用范围,将会在所有单元格中应用相同的字体设置。
如果想要分别设置颜色、粗细等特征,请生成不同的字体。
Font font = workbook.createFont();
//太字にする
font.setBold(true);
//文字の色を変える
//まずは色を生成する
XSSFColor color = new XSSFColor();
color.setARGBHex("FF0000"/* 赤色 */);//カラーコードで指定する場合
//または
XSSFColor color = new XSSFColor(new java.awt.Color(255,0,0)/* 赤色 */);//RGBで指定する場合
//フォントに色を設定する
XSSFFont font = (XSSFFont) workbook.createFont();
font.setColor(color);
如果在POI中从工作簿获取实例时,可能需要进行向下转型。
如果接收的是Font类型的接口而不是XSSFFont类型,那么在使用想要的方法时可能会导致编译错误的可能性。
设置单元格的背景颜色
我們將對單元格樣式進行設置,然後通過將單元格樣式應用於單元格的方法來進行。由於單元格樣式是workbook的屬性,因此需要從workbook中獲取。
與字體一樣,如果希望每個單元格有不同的背景顏色等,則需要生成不同的單元格樣式。
//まずは色を生成する
XSSFColor color = new XSSFColor();
color.setARGBHex("FF0000"/* 赤色 */);
//セルスタイルを生成する
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
//セルスタイルに色を設定する
cellStyle.setFillForegroundColor(color);
//塗りつぶしの仕方を設定する
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//単に塗りつぶす
//セルにセルスタイルを適用する
cell.setCellStyle(cellStyle);
当生成CellStyle时,调用了向下转型的操作。
从Java的原本思想来说,应该用interface的类型(CellStyle)进行接收是更好的选择,但由于存在只能用XSSFCellStyle才能使用的方法,因此采用了XSSFCellStyle进行接收。
设定网格线
使用单元格样式来设置网格线(框线)。
然后,将单元格样式应用于单元格…这是一种方法。
//セルスタイルを生成する
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
//罫線の設定
cellStyle.setBorderTop(BorderStyle.THIN/* 良く使う細い線 */);//上の罫線の設定
cellStyle.setBorderLeft(BorderStyle.THIN);//左の罫線の設定
cellStyle.setBorderRight(BorderStyle.THIN);//右の罫線の設定
cellStyle.setBorderBottom(BorderStyle.THIN);//下の罫線の設定
//セルにセルスタイルを適用する
cell.setCellStyle(cellStyle);
自动调整单元格的宽度。
在工作表中设置单元格的宽度。
如果存在日语,则必须明确设置字体,否则单元格的宽度会稍微变窄。
//フォントを生成する
XSSFFont font = (XSSFFont) workbook.createFont();
font.setFontName("遊ゴシック");//フォント名はエクセルから直接コピペすれば使えます
//セルスタイルを生成し、フォントの設定を適用する
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
cellStyle.setFont(font);
//全セルの幅を自動調整
sheet.autoSizeColumn();
赠品
建议提前生成所需行数和单元格数。并且最好在生成时应用单元格样式,这样后续只需操作单元格中的值就可以了!如果试图访问未生成的行,则会发生异常。
当尝试在单元格中设置值时,如果为null,则不会输入任何内容。
如果想要将类似于数据库列名的内容放入Excel文件中,您需要自己创建该部分。