java Excel書き込みの問題点と解決方法

このQ&Aのポイント
  • javaを使ったExcel書き込みのプログラムで、2行目に書き込みをすると1行目の一部の情報が消えてしまう現象が発生しています。
  • この現象を回避するために、最新の行に値を書き込む方法を説明します。
  • 具体的には、1行目から順に行を走査し、最初に値の入っていない行に書き込むことで、最新の行のみに値が残るようにします。
回答を見る
  • ベストアンサー

java Excel書き込み

前回質問をさせて頂き、 教えて頂いたプログラムを参考にしましたところうまくいきました。 ところがここでまた1つ問題点が発生してきてしまいました。 業務日報には4つの項目があり、そこを入力すると1行目のDセルまで値が入ります。 次にシステムから上書きをすると正常に2行目に書き込みはされるのですが、1行目のBCDセルの情報が消えてしまい、Aセルのみ残った状態になっています。 これを繰り返すと最新で書き込みした行以外の物はすべてAセルしか情報が残らなくなってしまいます。 この現象を回避するにはどうすればよいのでしょうか? アドバイス宜しくお願いいたします。 public void execute() { FileInputStream in = null; HSSFWorkbook workbook = null; HSSFSheet sheet = null; try { // test.xlsを読み込んでみる // 読み込めた場合は既存のファイルを利用する in = new FileInputStream("test.xls"); workbook = new HSSFWorkbook ( in ); sheet = workbook.getSheetAt ( 0 ); } catch ( IOException e ) { // test.xlsが読み込めない場合はここで新規作成 workbook = new HSSFWorkbook(); sheet = workbook.createSheet("test"); // 見出しを作る Row row = sheet.createRow(0); Cell cell1 = row.createCell(0); Cell cell2 = row.createCell(1); Cell cell3 = row.createCell(2); Cell cell4 = row.createCell(3); cell1.setCellValue("会社"); cell2.setCellValue("報告者"); cell3.setCellValue("場所"); cell4.setCellValue("時間"); } // 行を1行目から走査する // 1行目は見出しのため、チェック対象外 Row row = null; Cell cell1, cell2, cell3, cell4 = null; int i = 1; for ( ; ; i ++ ) { // i番目を取得する row = sheet.getRow(i); if ( row == null ) // i番目が取得できなかったら行を作成 row = sheet.createRow(i); // 0番目のセルを取得する cell1 = row.getCell(0); if ( cell1 == null ) // 0番目のセルが取得できなかったら新規作成 cell1 = row.createCell(0); cell2 = row.createCell(1); cell3 = row.createCell(2); cell4 = row.createCell(3); // そのセルに値が入っていない場合はループを抜ける if ( "".equals(cell1.getStringCellValue()) ) break; } // 値の入っていないセルでループを抜けるため、すなわち最新の行に内容を書き込む cell1.setCellValue(CompanyInput.getText()); cell2.setCellValue(NameInput.getText()); cell3.setCellValue(WhereInput.getText()); contents4.setCellValue(TimeInput.getText()); try { if ( in != null ) in.close(); } catch ( IOException e ) { e.printStackTrace(); } FileOutputStream out = null; try { // ファイルの書き出し out = new FileOutputStream("test.xls"); workbook.write ( out ); } catch ( IOException e ) { e.printStackTrace(); } finally { try { out.close(); } catch ( IOException e ) { e.printStackTrace(); } } } }

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 あくまで参考用に作ったのでそのままなんとなく追加しても動かないと思うのできちんと動作を把握して作成してくださいね。 まずAセルしか残らないのであれば、何故Aセルだけなのか?と考えます。 逆に言えばBCDセルは消えてしまう。 消えてしまう=どこかで空白文字を入れているか、初期化しているかetc と見ていくと if ( cell1 == null ) // 0番目のセルが取得できなかったら新規作成 cell1 = row.createCell(0); cell2 = row.createCell(1); cell3 = row.createCell(2); cell4 = row.createCell(3); ここ、poiを使うくらいだからと思ってもとの参考ソースでifの{}を省略して書いています。 省略すると真の時に実行されるのは次の行のみです。 cell1 = row.createCell(0);のみcell1==nullの場合実行されます。 じゃあ次からのcell2とかはどうなるの?というと 無条件でrow.createCellが実行されます。(=初期化みたいなもんです) だからBCDのみ消えてしまうんですね。(1行目から走査しているため常にBCD部分が初期化) 原因はここです。結果、以下のようにする必要があることがわかります。 if ( cell1 == null ) { // 0番目のセルが取得できなかったら新規作成 cell1 = row.createCell(0); cell2 = row.createCell(1); cell3 = row.createCell(2); cell4 = row.createCell(3); }

doborn
質問者

お礼

たびたびの回答ありがとうございます。 横着してました、すみませんorz 本当ですね、ifの後に{}がなかったことが原因だったのですね。 調べればすぐわかるようなことでした。。。 基礎ができておりませんでした、申し訳ございません。

関連するQ&A

  • Java swing エクセル書き込み

    現在、poiで日報システムを作成しております。 入力されたデータはexcelに出力されるような処理をしました。 日報を入力し、ボタンを押されるたびに既存のexcelファイルに上書きされるようにしたいです。 もしエクセルが新規で出力される場合には1行目には見出しを、2行目には入力された内容が出力されます。 次にこのシステムを使った人が書き込みをした場合には3行目に内容が出力されるようにしていきたいです。 このためにexcelを読み込んで、空白セルを確認する処理をすればいいのでしょうが、試行錯誤しました、まず自分で保存先に空のExcelを作らないといけないということと、1回目の入力では正常に2行目まで出力されていますが、もう1度入力をし、出力をすると1,2行目が消えて3行目に書き込みがされるだけになってしまいます。 そこで2点ございます。 (1)2回目の出力で1,2行目が消えてしまうのはプログラムの組み方に誤りがあるのでしょうが、お手上げ状態です。 (2)excelが存在しない場合はこのシステム上で新たに作成をしてくれるようにもできるのでしょうか? ご教授いただければと思います。 public void ExcelOutput() { Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(); /* * ファイルを読み込みし行数が「0」 * 何も書き込みがされていない場合にはヘッダと1つめの行(2行目)を書き込み */ if(ExcelInput() == 0){ Row head = sheet.createRow(0); Cell head1 = head.createCell(0); Cell head2 = head.createCell(1); head1.setCellValue("会社"); head2.setCellValue("報告者"); CellStyle styleHead = wb.createCellStyle(); styleHead.setFillPattern(CellStyle.SOLID_FOREGROUND); styleHead.setFillForegroundColor(IndexedColors.RED.getIndex()); head1.setCellStyle(styleHead); head2.setCellStyle(styleHead); Row contents = sheet.createRow(1); Cell contents1 = contents.createCell(0); Cell contents2 = contents.createCell(1); contents1.setCellValue(CompanyInput.getText()); contents2.setCellValue(NameInput.getText()); FileOutputStream out = null; try{ out = new FileOutputStream("ccc.xls"); wb.write(out); }catch(IOException e){ //System.out.println(e.toString()); }finally{ try { out.close(); }catch(IOException e){ //System.out.println(e.toString()); } } } /* * すでにエクセル作成済み(1,2行目に入力がされている)場合 * 途中から書き込み */ else{ Row contents = sheet.createRow(CompanyExcelInput()); Cell contents1 = contents.createCell(0); Cell contents2 = contents.createCell(1); contents1.setCellValue(InterviewPersonInput.getText()); contents2.setCellValue(NameInput.getText()); FileOutputStream out = null; try{ out = new FileOutputStream("ccc.xls"); wb.write(out); }catch(IOException e){ //System.out.println(e.toString()); }finally{ try { out.close(); }catch(IOException e){ //System.out.println(e.toString()); } } } } public int ExcelInput(){ int rowNullCount = 0; try{ //Excelのワークブックを読み込む POIFSFileSystem filein = new POIFSFileSystem (new FileInputStream("ccc.xls")); HSSFWorkbook wb = new HSSFWorkbook(filein); //シートを読み込む HSSFSheet sheet = wb.getSheetAt(0); //空行を検索し、空行を保持する for(rowNullCount = 0; rowNullCount <= sheet.getLastRowNum(); rowNullCount++) { HSSFRow row = sheet.getRow(rowNullCount); if(row == null){ break; } } } catch(IOException ioe) { // TODO } return rowNullCount; } ExcelInputとExcelOutputはボタンのactionPerformedで読み込んでいます。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • POIで出力したExcelファイルで変更メッセージ

    POIで出力したExcelファイルを開いてすぐに閉じると 「'○○.xls'への変更を保存しますか?」といったメッセージが出てしまい、 何とかならないかと困っている状況です。 全体的な流れとしては単純で、テンプレートとなるExcelファイルを用意して それをPOIを利用して読み込み、値をセットして、別名で保存しなおしています。 テンプレートは、SUM関数が書かれただけのシンプルなものです。 POIのバージョンは、3.8です。 JREは、1.5.0_15を使用しています。 プログラムは以下になります。 -----------------------------------------------------   int rowNo = 0;   int colNo = 0;      FileOutputStream fileOutputStream = null;   try{    //EXCEL読み込み    HSSFWorkbook inputWorkbook = new HSSFWorkbook(     new FileInputStream(new File("C:\\Test1.xls")));    fileOutputStream = new FileOutputStream("C:\\結果.xls");        //最初のシートを取得する    HSSFSheet sheet = inputWorkbook.getSheetAt(0);    sheet.setForceFormulaRecalculation(true);        //ROW取得    HSSFRow row = sheet.getRow(rowNo);    if(null == row)row = sheet.createRow(rowNo);    //CELL取得    HSSFCell cell = row.getCell(colNo);    if(null == cell)cell = row.createCell(colNo);    //値を書き込む    cell.setCellValue(1);        //EXCELファイル書き出し    inputWorkbook.write(fileOutputStream);   }catch (Exception e) {    e.printStackTrace();   }finally{    try{     if(null != fileOutputStream)fileOutputStream.close();    }catch (Exception e) {     e.printStackTrace();    }   } ----------------------------------------------------- 以下の一文を除くと、変更メッセージは表示されなくなります。 sheet.setForceFormulaRecalculation(true); しかし、この一文がないとSUM関数の計算が動作しません。 記述、認識の不備、また解決に向けた良い方法がありましたら ご教授のほど、よろしくお願いします。

    • ベストアンサー
    • Java
  • Java ApachePOIについて

    サーブレットとApachePOIについて質問です。 下記のソースで書き込んだセルをすべて黄色で塗りつぶしをしたいのですが、 ソースの書き方を教えてください。 以上、お願いします。 「ソース」 // 業務名前 String[] name4 = request.getParameterValues("gyoumuname"); for (int i = 0; i < name4.length; i++) { System.out.println(i + " " + name4[i]); name4[i] = new String(name4[i].getBytes("8859_1"), "UTF-8"); List outList=new ArrayList(); for (int i = 0; i < name4.length; i++) { outList.add(name4[i]); } for (int i = 0; i < outList.size(); i++) { Row row5 = sheet.getRow(8 + i); row5.getCell(3).setCellValue(new HSSFRichTextString(outList.get(i).toString())); } // 値を書き込んだエクセルを出力する FileOutputStream out = null; try { out = new FileOutputStream( "C:\\Users\\satou\\Desktop\\weekreport.xls"); workbook.write(out); } catch (IOException e) { System.out.println(e.toString()); } finally { try { out.close(); } catch (IOException e) { System.out.println(e.toString()); } } 以下省略。

  • POIでExcelに時刻(h:mm)の値を出力したい

    お世話になっております。 現在JAVA勉強という名目でEXCELで運用している社内勤務表をWebから入力できるシステムを開発しています。(好みによりExcel直接編集とWebによる編集どちらかを選べる) 現状の問題としてはPOIライブラリにより勤務開始時間、勤務終了時間の値をExcelのセルに出力するところで h:mm (例えば[10:30])という値が出力できないことです。(既存の書式に合わせた値の出力ができない) 文字列(先頭に'が付く)やシリアル値として出力することは可能ですが、ただ単純に[10:30]と出力することができません。 【実現したいExcelの出力結果】(JavaのString文字列"10:30"を元に出力) 値:[10:30] 表示:[10:30] ※Excelのセルは表示と値が異なる場合があるが両方共 h:mm 形式で出力したい。 【試行錯誤した出力結果】 (1)文字列として出力する 値:['10:30] 表示:[10:30] ※表示は期待通りだが値の先頭に'がついてしまいうまくいかない。 ※出力した値は他のセルの計算式で参照するので'がついてるのは問題あり。 (2)Date型で出力し書式を h:mm 形式にする 値:[613666:30:00] 表示:[10:30] ※表示は期待通りだが値がシリアル値になってしまいうまくいかない。 ※ただし m/d/yy h:mm 形式を出力するとシリアル値にならない。(何故だろう) ※シリアル値ではExcel直接編集の際に人が編集しにくい値なので問題。 実際Excelでは値も表示も[10:30]というセルはキーボード入力で簡単に作成できるのでPOIで出力できないとはとても思えません。 どうすれば[10:30]という値が出力できるか教えていただけないでしょうか。 よろしくお願いいたします。 ----------------------------------------------------------------------- 【使用しているPOI】 バージョン:3.2 ダウンロードしたファイル:poi-bin-3.2-FINAL-20081019.zip ----------------------------------------------------------------------- 【試行錯誤したプログラム】 public class CellOutput{ public static void main(String[] args){ HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); HSSFRow row = sheet.createRow(1); HSSFCellStyle style = workbook.createCellStyle(); style.setDataFormat(HSSFDataFormat.getBuiltinFormat("h:mm")); try { // テスト1(文字列で出力) HSSFCell cell1 = row.createCell((short)0); cell1.setCellValue("10:30"); // テスト2(Dateで出力 書式設定無) HSSFCell cell2 = row.createCell((short)1); SimpleDateFormat hhmmFormat = new SimpleDateFormat("h:mm"); Date time = hhmmFormat.parse("10:30"); cell2.setCellValue(time); // テスト3(Dateで出力 書式設定有) HSSFCell cell3 = row.createCell((short)2); cell3.setCellValue(time); cell3.setCellStyle(style); // テスト4(Dateで出力 m/d/yy h:mm形式) HSSFCell cell4 = row.createCell((short)3); HSSFCellStyle style2 = workbook.createCellStyle(); style2.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); cell4.setCellValue(time); cell4.setCellStyle(style2); } catch(Exception e){ } FileOutputStream out = null; try{ out = new FileOutputStream("sample.xls"); workbook.write(out); }catch(IOException e){ System.out.println(e.toString()); }finally{ try { out.close(); }catch(IOException e){ System.out.println(e.toString()); } } } } -----------------------------------------------------------------------

    • ベストアンサー
    • Java
  • ApachPOIについて

    サーブレットとApachePOIについて質問です。 下記のソースで書き込んだセルをすべて黄色で塗りつぶしをしたいのですが、 ソースの書き方を教えてください。 以上、お願いします。 「ソース」 // 業務名前 String[] name4 = request.getParameterValues("gyoumuname"); for (int i = 0; i < name4.length; i++) { System.out.println(i + " " + name4[i]); name4[i] = new String(name4[i].getBytes("8859_1"), "UTF-8"); List outList=new ArrayList(); for (int i = 0; i < name4.length; i++) { outList.add(name4[i]); } for (int i = 0; i < outList.size(); i++) { Row row5 = sheet.getRow(8 + i); row5.getCell(3).setCellValue(new HSSFRichTextString(outList.get(i).toString())); } // 値を書き込んだエクセルを出力する FileOutputStream out = null; try { out = new FileOutputStream( "C:\\Users\\satou\\Desktop\\weekreport.xls"); workbook.write(out); } catch (IOException e) { System.out.println(e.toString()); } finally { try { out.close(); } catch (IOException e) { System.out.println(e.toString()); } } 以下省略。

  • JTextAreaの文字列が表示されない

    閲覧ありがとうございます。 現在eclipseでjavaの勉強をしており、Apache POIを使ってエクセルの操作をしたいと思い以下のプログラムを組んでみたのですが、ボタンの方は上手く動作したのですがメニューの方が上手く動作しません・・・やりたい事は以下の通りです。 ・[ファイル]-[ファイルを作成]をクリックすると、保存ダイアログが表示され指定したディレクトリにtextAreaの内容が1行目、1列目のセルに表示されているxlsファイルを作成する また、ついでに教えて頂きたいのですが、WindowBuilderを使用しフレームの設計をする際、Button等各コンポーネントのアクセス修飾子はデフォルトだと全てprivateなのですが、この修飾子はプログラム中で変更しても問題無いでしょうか?WindowBuilderはつい最近使い始めたばかりでまだ慣れてないので・・・ 以下がソースです。開発環境はeclipse Indigo3.7で、WindowBuilderを使用しています。言語はJavaです。(字数オーバーしたので、import文は省略しています。 ■ExcelTest.java public class ExcelTest implements ActionListener { private JFrame frame; private JTextArea textArea; private JButton btnwo; private menu menu; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ExcelTest window = new ExcelTest(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public ExcelTest() { initialize(); } private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); textArea = new JTextArea(); frame.getContentPane().add(textArea, BorderLayout.CENTER); btnwo = new JButton("ファイルを作成"); btnwo.addActionListener(this); frame.getContentPane().add(btnwo, BorderLayout.WEST); menu = new menu(); frame.getContentPane().add(menu, BorderLayout.NORTH); }       //ボタンの動作 // こちらは上手く動作する @Override public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser(); int selected = chooser.showSaveDialog(null); if (selected == JFileChooser.APPROVE_OPTION) { String path = chooser.getSelectedFile().getPath(); // パスを取得 System.out.println(path); // パスを表示 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(); Row row = sheet.createRow(0); // 1行目を作成 Cell cell = row.createCell(0); // 1行目の1列目にセルを作成 cell.setCellValue(getTextAreaText()); // テキストエリアの文字列を表示 try { FileOutputStream fo = new FileOutputStream(path + ".xls"); wb.write(fo); fo.close(); } catch (IOException e1) { e1.printStackTrace(); } } } public String getTextAreaText() { return textArea.getText(); // テキストエリアの文字列を取得 } } ■menu.java public class menu extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private JMenuItem menuItem; public menu() { setLayout(new BorderLayout(0, 0)); JMenuBar menuBar = new JMenuBar(); add(menuBar, BorderLayout.NORTH); JMenu menu = new JMenu("ファイル"); menuBar.add(menu); menuItem = new JMenuItem("ファイルを作成"); menuItem.addActionListener(this); menu.add(menuItem); } //メニューの動作 // こちらが上手く動作しない @Override public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser(); int selected = chooser.showSaveDialog(null); if (selected == JFileChooser.APPROVE_OPTION) { String path = chooser.getSelectedFile().getPath(); // パスを取得 System.out.println(path); // パスを表示 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(); Row row = sheet.createRow(0); // 1行目を作成 Cell cell = row.createCell(0); // 1行目の1列目にセルを作成 ExcelTest excel = new ExcelTest(); cell.setCellValue(excel.getTextAreaText()); try { FileOutputStream fo = new FileOutputStream(path + ".xls"); wb.write(fo); fo.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }

    • ベストアンサー
    • Java
  • linuxでapache poiが動かない。

    linux(ubuntu12.04)でeclipseでプログラミングをしているのですが、以下のapache poiのサンプルが正常に動作しません。 import java.io.*; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class sample{ public static void main(String[] args){ HSSFWorkbook workbook = new HSSFWorkbook(); workbook.createSheet("test"); FileOutputStream out = null; try{ out = new FileOutputStream("sample1.xls"); workbook.write(out); }catch(IOException e){ System.out.println(e.toString()); }finally{ try { out.close(); }catch(IOException e){ System.out.println(e.toString()); } } } コンソールには、 Usage: BiffDrawingToXml [options] inputWorkbook Options: -exclude-workbook exclude workbook-level records -sheet-indexes <indexes> output sheets with specified indexes -sheet-namek <names> output sheets with specified name と表示されます。windowsで正常に動作した時には表示されません。 参照ライブラリーにjarファイルは登録してありますし、windows7では同じeclipseとapache poiの環境で正常に動き、xlsファイルができました。 権限の問題を疑い、プログラムのフォルダごと chmod -R 777 としてみたのですが改善されません。 ネットでの情報も少なく、何が悪いのかわかりません。windowsで動いてなぜlinuxで動かないのでしょうか?

    • ベストアンサー
    • Java
  • Excelのセルから日付情報を取得する方法について

    こんにちは。 現在JavaでExcelのセルから情報を取り込んで、それらを加工し、データベースに登録するプログラムを考えております。 まずはExcelから情報を取得することを目指しているのですが、文字列や数字は正常にセルからString型の変数に取り込めましたが、日付情報だけ5ケタの数字に変化してString型に取り込まれてしまいます。 双方の型が違うため取得が上手くいかないのでは!?と考えているのですが、解決方法が見つかりません>< データは途中で加工するため、日付型(!?)でセルに入っているものを、Stringに取り込んで、Stringで加工をして、またStringから日付型に戻してデータベースに登録したいというものです。 自身でも色々と調べてみましたが、解決策は見つからず、こちらに泣きついた次第です。 ご教授いただければ幸いです、どうぞ宜しくお願い致します。 <Excel> 2003 <Excelの表>     A    B     C 1|食料品|個数|賞味期限| 2|バナナ|2|H23.6.30| 3|りんご|3|H23.7.1| <参考プログラムのURL> http://vapour.s22.xrea.com/javadojo/index.php?JxlReadTest.java <プログラム> import java.io.File; import jxl.Cell; import jxl.Workbook; import jxl.Sheet; public class Sample{ public static void main(String[] args){ String inputFileName = "output.xls"; Workbook workbook = null; try { System.out.println(inputFileName + "ブックをオープンします"); workbook = Workbook.getWorkbook(new File(inputFileName)); if (workbook == null) { System.err.println(inputFileName + "ブックオープンに失敗しました"); return; } } catch (Exception ex) { System.err.println(ex.toString()); return; } System.out.println("1番目のシートにアクセスします"); Sheet sheet = workbook.getSheet(0); if (sheet == null) { System.err.println(inputFileName + "シート作成に失敗しました"); return; } Cell cell = null; String cellStr = ""; try { for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { cell = sheet.getCell(i,j); cellStr = cell.getContents(); System.out.println("セル("+i+","+j+") は「"+cellStr+"」です"); } } } catch (RuntimeException ex) { System.err.println("A3セルの読込に失敗しました:" + ex.toString()); } try { if (workbook != null) { workbook.close(); } } catch (Exception ex) { System.err.println(inputFileName + "ブックのクローズに失敗しました:" + ex.toString()); } } }

    • ベストアンサー
    • Java
  • Excelに時刻を入れたい

    はじめまして。 JAVA初心者です。 DBから取得したデータ「09:00」をExcelに入れようとしているんですが、表示された結果が正しくないのです。 DBからTimeタイプとして入れたら、セル値がシリアルになってしまう。 他、Stringとしたら、セル値にアポストロフィが付いてしまう。 今のところ解決方法はありません。 どうすれば、正しい結果(9:00)が表示されるのでしょうか。 教えていただけませんか? ついでに、既存エクセルの書式は「時刻」です。 ソースは以下の通りです。(Timeタイプとする) -------------------jsp ソース------------------ FileInputStream inputStream = null; FileOutputStream outputStream = null; File excel = new File("C:\\123123.xls"); inputStream = new FileInputStream(excel); HSSFWorkbook workBook = new HSSFWorkbook(inputStream); HSSFSheet newSheet = workBook.getSheetAt(0); HSSFRow newRow = newSheet.getRow(16); HSSFCell newCell1 = newRow.getCell((short) 6); java.sql.ResultSet rs = null; rs = DBtest.DBGetdate(); Time modifyTimeTemp = null; HSSFRow newRowtemp = newSheet.getRow(18); HSSFCell newCell1temp = newRow.getCell((short) 6); while(rs.next()){ modifyTimeTemp = rs.getTime("Time"); } //newCell1temp:正しく入力されたデータ newCell1.setCellStyle(newCell1temp.getCellStyle()); newCell1.setCellValue(modifyTimeTemp); try{ response.setContentType("application/msexcel"); response.setHeader("Content-Disposition", "attachment; filename=jsp.xls"); OutputStream outs = response.getOutputStream(); workBook.write(outs); outs.close(); }catch(Exception e){ e.printStackTrace(); }

    • ベストアンサー
    • Java
  • POIの出力場所について

    お世話になります。 POI 出力などで検索を行いましたが上手くHITしませんでしたのでご質問させて頂きます。 例えば HSSFWorkbook workbook = null; FileOutputStream out = null; out = new FileOutputStream("質問.xls"); workbook.write(out); など記述し出力すると思うのですが「質問.xls」を C:\testに指定して出力したいなど指定した階層に出力するということは出来るでしょうか。

    • ベストアンサー
    • Java