人気マンガがだれでも無料♪電子コミック読み放題!!

度々、POIを使ったExcel出力で質問です
書式設定で通貨記号ありのフォーマットを指定したいのですが

Excelに「\」記号で書式設定した後に
POIで書式を取得したところ
($#,##_):($#,##) ←うろ覚えです(汗
の形式で取得できました

同じように、他のセルに対してPOIで設定したところ
通貨記号が「$」で表示されてしまいました

Excelの書式設定画面を見ると、
 使用する通貨記号の設定
だけ、別で指定するようになっています。

POIで通貨記号を設定する方法を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんな感じでしょうか。



HSSFWorkbook workbook = new HSSFWorkbook();
HSSFDataFormat dataFormat = workbook.createDataFormat();
short index = dataFormat.getFormat("\"\\\"#,##0_);[Red](\"\\\"#,##0)");
HSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(index);
HSSFSheet sheet = workbook.createSheet();
HSSFCell cell = sheet.createRow(0).createCell((short)0);
cell.setCellStyle(style);

参考URL:http://www.javadrive.jp/poi/style/index9.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
無事に実現できました

お礼日時:2006/09/04 22:46

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPOIで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勉強という名目でEXCELで運用している社内勤務表をWebから入力できるシステムを開発しています。(好みによりExcel直接編集とWebによる編集どちらかを選べる)

現状の問題としてはPOIライブラリにより勤務開始時間、勤務終了時間の値をExcelのセルに出力するところで h:mm (例えば[10:30])という値が出力できないことです。(既存の書式に合わせた値の出力ができない)
文字列(先頭に'が付く)やシリアル値として出力することは可能ですが、ただ単純に[10:30]と出力す...続きを読む

Aベストアンサー

できないわ。
残念ながら。

それが証拠に、
最初に10:30と入力したExcelのセルから
getCellStyleした結果をsetCellStyleしても
反映されないわ。
テスト3の方法を取るのが一番と思うわ。


それと、POI3.2は
・createCellでshortへのキャストは不要よ。
・テスト1で、文字列は必ずHSSFRichTextStringに変換すること。

Qjakarta poiを使用し、EXCELの行コピーはできないのでしょうか?

以下のような処理を検討しています。

フォーマット.xlsには、タイトル行の雛型(背景色などを定義済)をを作成しておきます。

そのフォーマット.xlsをpoiを利用し読み込み、
■タイトル行
・明細
・明細
・明細
■タイトル行
・明細
・明細
の要領でタイトル行を何度もコピーし、新しいエクセルを出力したいと考えています。
HSSFSheet#shiftRowsは完全なる移動のようですので、
何度もタイトル行を使う場合には不都合がでてしまいます。

単純な行コピーなのでできそうな感じもするのですが、
ご存じな方いらっしゃいましたら、
ご教授いただけますようお願いいたします。

Aベストアンサー

コピーのようなメソッドは用意されていないんですね。
ちょっと面倒ですが、行の内容を取得して、その中のセルの値およびスタイルをコピーするという方法でしたらどうでしょうか。

  // テンプレートの読み込み
  POIFSFileSystem fs = new POIFSFileSystem(
      new FileInputStream(new File("src.xls")));
  HSSFWorkbook book = new HSSFWorkbook(fs);
  HSSFSheet sheet = book.getSheetAt(0);
  
  // タイトル行(1行目)の取得
  HSSFRow titleRow = sheet.getRow(0);
  
  // タイトル行を別の行(ここでは2行目)へコピーします。
  HSSFRow row = sheet.createRow(1);
  
  // セルをコピーします。
  int length = titleRow.getLastCellNum();
  for (int i=0; i<length; i++) {
    HSSFCell titleCell = titleRow.getCell((short)i);
    HSSFCell cell = row.createCell((short)i);
    if (titleCell != null) {
      // 値を取得
      switch (titleCell.getCellType()) {
        case HSSFCell.CELL_TYPE_BLANK :
          break;
        case HSSFCell.CELL_TYPE_BOOLEAN :
          cell.setCellValue(titleCell.getBooleanCellValue());
          break;
        case HSSFCell.CELL_TYPE_ERROR :
          cell.setCellValue(titleCell.getErrorCellValue());
          break;
        case HSSFCell.CELL_TYPE_FORMULA :
          cell.setCellValue(titleCell.getStringCellValue());
          break;
        case HSSFCell.CELL_TYPE_NUMERIC :
          cell.setCellValue(titleCell.getNumericCellValue());
          break;
        case HSSFCell.CELL_TYPE_STRING :
          cell.setCellValue(titleCell.getStringCellValue());
          break;
        default :
      }
      // スタイルを取得
      cell.setCellStyle(titleCell.getCellStyle());
    }
  }
  
  // 保存
  FileOutputStream fos = new FileOutputStream(new File("dest.xls"));
  book.write(fos);
  fos.close();

※例外処理は抜いています。

コピーのようなメソッドは用意されていないんですね。
ちょっと面倒ですが、行の内容を取得して、その中のセルの値およびスタイルをコピーするという方法でしたらどうでしょうか。

  // テンプレートの読み込み
  POIFSFileSystem fs = new POIFSFileSystem(
      new FileInputStream(new File("src.xls")));
  HSSFWorkbook book = new HSSFWorkbook(fs);
  HSSFSheet sheet = book.getSheetAt(0);
  
  // タイトル行(1行目)の取得
  HSSFRow titleRow = sheet.getRow(0);
...続きを読む

QExcel:表示形式の変更がただちに反映されない…!?

WinXP,Excel2002です。

業務アプリから出力したExcelのファイルのみで起きている現象なのですが、
データの書式を「ユーザ定義」で設定しても、
なぜか、その場で反映されません。
一度セルをダブルクリックしたのちにフォーカスをはずすと、
なぜか そこでパッと反映されます。

値は「2006-07-01 12:02:17」といったもの。
「ddd」と設定した時点で表示は「Sat」になるはずなのに、
1セルずつ ぷちぷちダブルクリックしないと変わってくれません…。

同僚に聞くと「外部ソフトから落としたためで、手の打ちようがない」とのことですが、
どうにかこのブックを使って表示形式を変えることはできないでしょうか?
お願いします!

Aベストアンサー

こんにちは。KenKen_SP です。

文字列データとなっているとか? 特に日付部分が日本の標準的な

 yy/mm/dd

ではなく、”-”で区切られてますし。OS や Excel のバージョンによっては、
コントロールパネルの日付書式の設定いかんで文字列として扱われる可能性は
ありますよね。

 # Excel 2002 VBA で 配列にいれた日付をセルに転記すると英語書式の
 # 文字列になるバグがありました。SP2 か SP3 で修正されましたが。
 # 独自プログラム(VBA含む)でセルにデータを書き込む場合は、この
 # ように、Excel本体の動作とは違う結果になる場合が稀にあります。

適当なセルに 1 を入力してコピーし、セルを選択して形式を選択して貼り付け
「乗算」で、シリアル値に直せると思います。Excel が文字列として認識して
いるなら「日付・時刻」の表示形式を設定しただけでは表示は更新されません。

ダブルクリックで表示形式が有効になるのは...

セルの表示形式が「標準」であれば、セルをダブルクリックで編集モードに入り、
再度確定させると値の更新があったものとして、再計算がなされます。このとき
Excel は値をみて、日付・時刻と自動的に認識し、設定された「日付・時刻」の
ユーザー定義書式を適用するのだと思います。

こんにちは。KenKen_SP です。

文字列データとなっているとか? 特に日付部分が日本の標準的な

 yy/mm/dd

ではなく、”-”で区切られてますし。OS や Excel のバージョンによっては、
コントロールパネルの日付書式の設定いかんで文字列として扱われる可能性は
ありますよね。

 # Excel 2002 VBA で 配列にいれた日付をセルに転記すると英語書式の
 # 文字列になるバグがありました。SP2 か SP3 で修正されましたが。
 # 独自プログラム(VBA含む)でセルにデータを書き込む場合は、この
 #...続きを読む

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

QJavaで文字列をゼロ埋め(ゼロパディング)

Javaで文字列を前ゼロで埋め(ゼロパディング)たいのですが、
exceptionが発生してうまくいきません。
だれかお助け頂けたら助かります。

(例)123の前に0を5つ結合したい場合、

String str2="123";
String str = String.format("%08s",str2);

で問題無いと思ったのですが、
exceptionが発生してしまいます。

回答お待ちしております。

Aベストアンサー

そのExceptionはどういったExceptionなのか把握されてますか?
何が悪いのかの理由もそのExceptionからわかると思いますが。

http://docs.oracle.com/javase/jp/6/api/java/util/Formatter.html#syntax
をよく読んで"%08s"という指定ができるのかどうか確認しましょう。

やられたいことは"123"の先頭に"00000000"をつけて後ろから8文字取り出せばできると思いますが。

Qyyyymmddからyyyy/mm/ddへの変換

いつもお世話になっております。
Aと言う変数にはyyyymmddの値が入っていて
Aをyyyy/mm/ddにしてBの変数に入れたい場合の処理がわかりません。
調べたところ、SimpleDateFormatクラスと言うものを使えばよいと言うことが判明しました。
しかし、今まで使ったことがないのでよくわかりません。
変数Aと変数BはどちらもString型です。
ご教授お願い致します。

Aベストアンサー

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.parse(a);
  formatter.applyPattern("yyyy/MM/dd");
  String b = formatter.format(date);
  System.out.println(b);
}
catch (ParseException ex) {
  System.out.println("解析失敗");
}

 こんな感じでいいんじゃないでしょうか。

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.p...続きを読む

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Q【Apache POI】Excelの枠線を消す方法

いつもお世話になっております。

Apache POIを使用して、シート全体の範囲でExcelシートの枠線を消す方法を教えてください。
セルひとつひとつに書式を設定するのではなく、全体で設定したいです。
ちなみに環境は以下を使用しています。

情報に不足があればお問い合わせください。よろしくお願いします。

【環境】
Excel : 2002 SP3
java : 6.0

Aベストアンサー

POIのバージョンは何でしょうか?
多分、バージョンによらず一発で設定できるようなメソッドは多分ないと思いますが。
行ごと列ごとなどの単位で、一つ一つ設定するしかないと思います。

「枠線」ではなくて「罫線」ですよね?
「枠線」なら、
sheet.setDisplayGridlines(false);
とすれば表示されなくなります。
http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Sheet.html#setDisplayGridlines(boolean)


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング