9

Java 用の Apache POI ライブラリを使用していくつかの xlsx ファイルを作成しようとしていますが、ファイルを作成するためのすべてが正常に機能しています。

問題は、物理プリンターを使用してこれらのファイルを印刷したいときに発生します。ワークブックの各シートを 1 ページに収めたいと考えています。ドキュメントを調べたところ、次のコードが機能するはずです。

       XSSFWorkbook wb = new XSSFWorkbook();
       XSSFSheet sheet = wb.createSheet("format sheet");

       PrintSetup ps = sheet.getPrintSetup();

       sheet.setAutobreaks(true);

       ps.setFitHeight((short)1);
       ps.setFitWidth((short)1);

       for(int i = 0; i < 100; ++i){
            sheet.createRow(i);
            sheet.getRow(i).createCell(0).setCellValue("Test " + i);
        }

       FileOutputStream output = new FileOutputStream("Test.xlsx");
       wb.write(output);
       output.close();

しかし、そうではありません...印刷しようとすると、3枚のシートに印刷されます(PrintSetupパーツを使用しなかった場合に実際に印刷されるはずのシート)。したがって、コードはまったく何もしません。

そのコードの何が問題なのか誰か教えてもらえますか?

また、xlsx ファイルの印刷について別の質問があります。実際にファイルを開いて印刷をクリックせずに、Java プログラムから xlsx ファイルを印刷する方法があるかどうか知りたいですか? wb.printAllSheetsInWorkbook (); のように またはそのようなもの。

4

2 に答える 2

20

ps.setFitHeight((short)1);
ps.setFitWidth((short)1);

使用する

sheet.setFitToPage(true);
于 2012-09-11T18:30:26.297 に答える
0

poi-3.8 および xls 形式で動作する Office 2013 では動作しません

poi からシートを作成すると、設定が機能しません。Office Excel でシートを開く/作成し、Office Excel からページの高さを設定し (たとえば、2 ページに)、保存してから、プログラムを実行してこのシートを読み取り、高さ/幅を設定します (たとえば、1 に)ページ)、それから動作します。

poi からシートを生成するとレコードが書き込まれないようです。レコードがすでに存在する場合、poi はそれを更新できます。

別の奇妙なこと - poi から xls を生成 - 6kb。オフィスで Excel を開いて保存します - 22 kb。オフィスで Excel を開き、高さ/幅を調整して保存します - 30 kb。間違いなく、ファイルを生成するときに poi はレコードを書き出していません。おそらく他の情報も欠落しています (22 )

于 2014-04-01T12:51:31.227 に答える