Excel2007 Delphi XE3 中央揃えでエラー

解決


momo  2013-03-05 18:32:13  No: 43996  IP: 192.*.*.*

DelphiからExcelの操作方法について教えてください。

環境:Excel2007  Delphi XE3 

下記のコードの中央揃えでエラーになります。
「RangeクラスのHorizontalAlignmentプロパティを設定できません…」

sRange := GetStrRange(1, iRow + 3, 1, iRow + 3);

WorkSheet.Range[sRange].Cells.HorizontalAlignment := xlCenter;
WorkSheet.Range[sRange].Cells.VerticalAlignment   := xlCenter;

ちなみにこっちは大丈夫です。
WorkSheet.Range[sRange].Cells.MergeCells          := True;
WorkSheet.Range[sRange].Cells.WrapText            := True;

いろいろ調べましたが解決できず困っています。
よろしくお願いします。

編集 削除
momo  2013-03-05 18:47:28  No: 43997  IP: 192.*.*.*

連続で申し訳ありません。

折り返して全体を表示する場合に、
WorkSheet.Range[sRange].Cells.WrapText := True;
を指定すると折り返されるのですが、
縦幅が広がりません。

文字数をみて縦幅をこちらで指定するしかないのでしょうか?

編集 削除
momo  2013-03-05 21:03:05  No: 43998  IP: 192.*.*.*

折り返しの縦幅指定については下記の方法で対応できました。

//1.結合セルの値を別の単一セルXに入れます。.value = .value
//2.セルXの列幅を、結合セルと同じにします。
//3.そのセルXをautofitします。
//4.セルXの行高さ(A値)を取得します。
//5.統合セルが3行分で結合されていたら、A値を3で割ります。
//6.結合セルの各行の行高さを、5項で取得した値に設定します。

センタリングの情報ありましたら教えてください。

編集 削除
Nov  2013-03-05 21:08:24  No: 43999  IP: 192.*.*.*

当方、Win7Pro-64bit/Excel2007/XE2 ですが
WorkSheet.Range[sRange].HorizontalAlignment := Integer(xlCenter);
でOKでした。負数の定数値を渡すときに注意が必要なようです。
(xlCenter: Integer=$FFFFEFF4; と設定されていれば問題ないのですが...)

WorkSheet.Range[sRange].WrapText := True;
は、'Cells.'があってもなくても問題無く縦幅が自動調整されたので、分かりません。
他の書式の影響を受けてませんか?

編集 削除
Nov  2013-03-05 21:11:38  No: 44000  IP: 192.*.*.*

>他の書式の影響を受けてませんか?

良く見たら、MergeCellsと一緒に設定しようとしてますが、これはNGです。
外せば、OKになりませんか?

編集 削除
Nov  2013-03-05 21:15:35  No: 44001  IP: 192.*.*.*

>良く見たら、MergeCellsと一緒に設定しようとしてますが、これはNGです。

間違いです。無視してください。

編集 削除
Nov  2013-03-05 21:45:18  No: 44002  IP: 192.*.*.*

どうやら、仕様のようです(下記リンク参照)。
自前(momoさんの方法含む)で対応するしかないかと...

http://support.microsoft.com/kb/212010/ja

編集 削除
momo  2013-03-06 16:34:01  No: 44003  IP: 192.*.*.*

ありがとうございます。

折り返しの縦幅指定については、貼っていただいたリンクを
確認いたしました。
結合しているとダメなんですね…

センタリングは教えていただいた方法でできました。
ありがとうございました!

編集 削除