使用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文件中,您需要自己创建该部分。

bannerAds