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;