web-dev-qa-db-ja.com

Apache POIでの自動折り返し(Excel)

Javaプログラムで、ヘッダーとデータを入力として受け取り、Excelファイルを生成します。

ただし、ヘッダー値が長く、列数が多い場合、Excelシートが不必要に広くなる傾向があります。

ヘッダーがあるため、最後の列の内容を表示するには右にスクロールする必要があります。

これを解決して、セルのコンテンツが大きい場合に値xとすると、自動折り返しが発生し、自動的に行の高さが調整され、列の幅が固定されるように解決できる方法はありますか?.

私が探している大まかなアルゴリズムは次のとおりです。

 if(content.size is more then 50 chars){
       - apply auto wrap with centred text
       - adjust the row height accordingly
       - adjust all the cells in the column accordingly
 }

誰かが私にオンラインで利用可能ないくつかの例を示すことができるなら。

読んでくれてありがとう!

14
Vicky

あなたはセルスタイルでこれを達成できるはずです、私は示すために例をまとめようとしました:

public class SO{
    public static void main(String[] args) {

        try {
            FileInputStream is = new FileInputStream(new File("D:\\Users\\user2777005\\Desktop\\bob.xlsx"));
            XSSFWorkbook wb = new XSSFWorkbook(is);
            String header = "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789";
            Sheet sheet = wb.getSheet("Sheet1");
            sheet.setColumnWidth(0, 18000);
            Row row = sheet.createRow(0);
            Cell cell = row.createCell(0);

            if(header.length() > 50){ //Length of String for my test
                sheet.setColumnWidth(0, 18000); //Set column width, you'll probably want to Tweak the second int
                CellStyle style = wb.createCellStyle(); //Create new style
                style.setWrapText(true); //Set wordwrap
                cell.setCellStyle(style); //Apply style to cell
                cell.setCellValue(header); //Write header
            }

            wb.write(new FileOutputStream(new File("D:\\Users\\user2777005\\Desktop\\bob.xlsx")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}       

幸運を!

51
Levenal