csvファイルの生成について

解決


Delphiファン  2020-12-03 09:56:05  No: 149436

おはようございます。
Delphi初心者です。
csvファイルを以下のように生成しました。

var
  csvFile : TextFile;
  result : String;
begin
    AssignFile(csvFile, saveFile.Text + '.csv');
    Rewrite(csvFile);
          result := '050';
          Write(csvFile, result);
          result := ',';                  //カンマ
          Write(csvFile, result);

          result := '顧客コード';
          Write(csvFile, result);
          result := ',';                  //カンマ
          Write(csvFile, result);

          result := ’品名';
          Writeln(csvFile, result);
    CloseFile(csvFile);

すると、csvファイルをExcelで開くと 「05」が「5」になって表示されます。
ネットで探していると、Excel側の設定で修正は出来るようですが
csv生成側で「05」表示になるように出来ますでしょうか。
ご教授頂ければ幸いです。


take  2020-12-03 10:39:55  No: 149438

サンプルが 050のようですが
050がExcel側で数値と捉えられると 50になります。
ダブルコーテーション囲みにすれば文字型として渡せるかも

 result := '050';
    ↓
 result := '"050"';

それでもダメならダブルクリック読み込みではなく
Excel側で csvを開く操作をするとオプションで細かく指定で来たと思います。


HFUKUSHI  2020-12-03 11:01:11  No: 149439

先頭に"'"(シングルクォート)を付ける、という方法でもいいかもしれません。
蛇足ですが、AssignFile/WriteFile/CloseFileを使っているのはなぜでしょう?もし理由がないのであれば、TStringListを使うことをお勧めします。

System.Classes.TStringList - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Sydney/ja/System.Classes.TStringList

var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Add('''050');  // 文字列の中では'を2つ重ねる
    SL.Add('顧客コード');
    SL.Add('品名');
    SL.SaveToFile(saveFile.Text + '.csv',TEncoding.ANSI);
  finally
    SL.Free;
  end;
end;


Delphiファン  2020-12-03 11:21:55  No: 149443

takeさん、HFUKUSHIさん ご回答ありがとうございました。
ご指導通りコーディングしたところ
Excelで0が表示されました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加