ここから質問投稿すると、最大4000ポイント当たる!!!! >>

お世話になります。
現在、POIでExcelファイルの操作をしているのですが
POIを使ったテキストボックスの作成で困っています。

HSSFPatriarch patriarch = workbook.getSheetAt(0).createDrawingPatriarch();
HSSFTextbox textBox = patriarch.createTextbox(new HSSFClientAnchor(0, 0, 100, 255,(short)1, 1, (short)1, 1));
textBox.setString(new HSSFRichTextString("テキストボックス内のテキスト"));

上記のようにテキストボックスを作成しているのですが
テキストボックス内のテキストの文字サイズ指定の方法が分からず、
テキストボックスの外へテキストがはみ出して表示されます。
テキストボックスのサイズを広げずにテキストをテキストボックス内に
収める方法を模索しているのですがそれらしい情報が見つかりません。

よければご教示下さい。よろしくお願いいたします。

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

A 回答 (1件)

使用したことがないので


はっきりとはわかりませんが。。。
HSSFRichTextString#applyFont(Font font)
でいける気がしますが。

テキストボックスの幅と文字数で
適当に都度設定してやる必要は
あると思いますが。

参考URL:http://poi.apache.org/apidocs/org/apache/poi/hss …
    • good
    • 0
この回答へのお礼

ありがとうございます!
テキストボックスのオブジェクトではなく
挿入する文字列のオブジェクトに対してスタイルを指定出来たのですね。
上記の方法で無事解決出来ましたのでこれで回答を締め切らせていただきます。
本当にありがとうございました。

お礼日時:2009/12/04 14:25

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

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

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

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

QJakarta POI での、excelのシート保護

こんにちは。いつも色々と参考にさせていただいております。POIを利用して、excelのシートの操作をやっているのですが、シートの保護がうまくいきません。

まず、sample.xlsを読み込み、

FileInputStream is = new FileInputStream("sample.xls");
HSSFWorkbook book = new HSSFWorkbook(is);
HSSFSheet sheet = book.getSheetAt(0);

HSSFSheetクラスのsetProtectメソッドを用いて、

sheet.setProtect(false);

とすると、NullPointerExceptionが発生してしまいます。

メソッドの使い方が間違っているのでしょうか?
どなたかご存知でしたらご教授いただきたいと思います。
よろしくお願い致します。

Aベストアンサー

こんにちは

POIのソースを探ってみました。
ワークブック(HSSFWorkbook)から、すでに存在するシートを取得して(getSheetAtメソッド)、そのシートに対して、プロテクトの設定する。
→NullPointerException

ワークブック(HSSFWorkbook)から、新規にシートを作成・取得して(createSheetメソッド)、そのシートに対して、プロテクトの設定する。
→例外なく通過=成功

と言う結果になりました。
HSSFSeetクラスには、Sheetクラスがフィールド(メンバー変数)としてあって、Sheetクラスには、ProtectRecordクラスがフィールドとしてあります。
どうやら、createSheetメソッドで、HSSFSeetクラス・オブジェクトを生成すると、ProtectRecordクラス・オブジェクトも生成されますが、
getSheetAtメソッドでHSSFSeetクラス・オブジェクトを取得しても、ProtectRecordクラス・オブジェクトが生成されません。

これがPOIの仕様なのか、バグなのかわかりませんが、原因は、このメソッドによる動作差異によるようです。

こんにちは

POIのソースを探ってみました。
ワークブック(HSSFWorkbook)から、すでに存在するシートを取得して(getSheetAtメソッド)、そのシートに対して、プロテクトの設定する。
→NullPointerException

ワークブック(HSSFWorkbook)から、新規にシートを作成・取得して(createSheetメソッド)、そのシートに対して、プロテクトの設定する。
→例外なく通過=成功

と言う結果になりました。
HSSFSeetクラスには、Sheetクラスがフィールド(メンバー変数)としてあって、Sheetクラスには、Prote...続きを読む

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);
...続きを読む

Qテーブルからのselectにおいてデータの有無により結果をわけたい

id | point
----+-------
1 | 10
2 | 9
3 | 5
....
というテーブルがあるとします.
idを指定してpointを得たいのですが、そのidがこのテーブルに存在しない場合は空の結果ではなく0を返したいのです.
plpgsqlなどを使いif文で場合分けすればできることはわかっているのですがSQL文だけで(それもできれば1文で)これを実現する方法はあるでしょうか?
よろしくお願い致します。

Aベストアンサー

変則的ですが、これでよければidがユニークでなくても大丈夫ですし、集合関数を使わなくてもOKです。

select dm.id,case when ex1.point is null then 0 else ex1.point end from
(select ? as id) as dm left join ex1 on dm.id = ex1.id;

?を適当に変えてください。
chukenkenkouさんの発想はこれですよね。

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

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)

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

QJSPでリンクを利用してパラメータを次画面に渡す方法について。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">
---------------------------------------------------------------------

としておりますが、次画面へ遷移すると、ID_Bの値はnullとなってしまうために、正常にデータの取得ができません。

二つのパラメータを使用する場合のパラメータを渡す方法を教えて頂きたいと思います。よろしくお願いします。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">...続きを読む

Aベストアンサー

<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>&ID_B=<%= rs.getString("ID_Bcat_id") %>">番号</a>

としてID_Bを&で繋げればMethod="get"で送れますね。
inputタグで送る場合はformタグでactionアトリビュートに飛ぶjspを指定してsubmitボタンかJavaScriptでsubmitさせなければならないと思います。

QHashMapで、valueにマッピングされているkeyを取得したい。

HashMapについて教えて下さい。
HashMapで、valueにマッピングされているkeyを取得したいのですが
そんなことって出来るのでしょうか?

keyにマッピングされているvalueを取得することは
できますよね。その逆をしたいのですが。

尚、この場合、valueにマッピングされているkeyは
必ず一つです。

もし、分かる方がいましたら
教えていただけないでしょうか・・。

Aベストアンサー

要素を全部たぐって調べるしかないのではないでしょうか?

// map、value が与えられているとして、
Object key = null;
for (Iterator i = map.keySet ().iterator (); i.hasNext (); ) {
Object k = i.next ();
Object v = map.get (k);
if (value.equals (v)) {
key = k;
break;
}
}

(未テスト)


人気Q&Aランキング