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;
|