Delphi Programming / Object Pascal
[掲載 2009年05月24日] [更新 2013年12月14日] エクセル操作フォームEx |
エクセル操作フォームEx 参考コード類
改行を含む文字列の扱い |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010 |
エクセルのバージョンによっては,次のコードのように,改行を含む文字列をセルへ代入した場合,正常に表示できないことがあります.行区切り文字が「・」となり,表示不可の文字として表示されてしまうことがあります.
筆者が確認した限りでは,この現象は Excel 2000 以降では発生していません. |
|
図1
TMemo の Text をセルに表示
|
リスト1
Text プロパティをそのままセルへ代入した場合 |
procedure TplExcelFormEx2.Button1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('北穂高岳');
Memo1.Lines.Add('槍ヶ岳');
Memo1.Lines.Add('谷川岳');
xlfCellValue['B2'] := Memo1.Text;
end;
この現象は,次のように AdjustLineBreaks 関数を使用することで回避できます.
改行文字を含む文字列ではなく,個々の文字列を結合する際に改行文字を使用するには,sLineBreak が使用できます.sLineBreak の値は,Windows の場合 CR/LF (#13#10) です. |
|
図2
正常に表示される
|
リスト2
AdjustLineBreaks 関数を使用する |
procedure TplExcelFormEx1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('北穂高岳');
Memo1.Lines.Add('槍ヶ岳');
Memo1.Lines.Add('谷川岳');
xlfCellValue['B2'] := AdjustLineBreaks(Memo1.Text, tlbsLF);
end;
逆にエクセルのセルの内容を String 型の変数や TMemoコンポーネントの Text プロパティにに代入する時には,次のように,改行文字を AdjustLineBreaks 関数で処理できます.
この処理を行わないと,エクセルのバージョンによっては,文字列の最後に「・」が表示されてしまうことがあります また,空白行の改行が無視されることがあります. |
リスト3
AdjustLineBreaks 関数で行区切り文字を CR/LF にする |
procedure TplExcelFormEx1.Button3Click(Sender: TObject);
begin
//クリアして文字列をセット
Memo1.Clear;
Memo1.Text := AdjustLineBreaks(xlfCellValue['B2']);
end;
|