>どこで詰まってるのかわからないです・・
私も分かりません。デバッグして、何処まで動いているのか確認して下さい。
>CString Data_Write[255][255] = {{mych},{mych1}};
意味が理解できませんが、単純にそのまま保存してはダメなのでしょうか?
Cで書かれているようなので、こんな感じで。
fprintf(fp,%s,%s,\n,ss1,ss2);
たくさんの御返答、有難う御座います。
さやぴ さんの提案を飲んでやってみたところ、テキストファイルへの書き込みはできま
した。が、CSVやExcelファイルへの書き込みができません。
御指摘願います。
void CCsvDlg::OnButton1()
{
char mych[30], mych1[30], mych2[30];
CString ss, ss1, ss2;
CEdit* myED1 = (CEdit*) GetDlgItem(IDC_EDIT1);
CEdit* myED2 = (CEdit*) GetDlgItem(IDC_EDIT2);
myED1 -> GetWindowText (ss1); //ED1の文字列を取り出
myED2 -> GetWindowText (ss2); //ここまではOK
FILE *fp;
if((fp = fopen(.\\data\\export.csv,a)) == NULL){
AfxMessageBox( CSVファイルが開けません ,MB_OK |
MB_ICONEXCLAMATION);
}
ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);
fprintf(fp,mych);
}
fclose(FILE *fp);
openするファイルをテキストファイルにすると追加書き込みできました。
今CSVファイルを開くようになってます、エラーはでませんが書き込みは成されてませ
ん。
訂正です。
ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);
fprintf (fp, %c,\n, mych);
上の書き方だとss1とss2をまとめちゃってますけど、
/*ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);
*/
fprintf(fp, %c, %c, \n, ss1, ss2);
ともやってみましたができませんでした。
テキストへ書き込むのとCSVやExcelに書き込むのとでは何が違うのでしょうか?
> 今CSVファイルを開くようになってます、エラーはでませんが書き込みは成されてません。
CSVはただのテキストファイルです。
> fprintf(fp, %c, %c, \n, ss1, ss2);
> ともやってみましたができませんでした。
書式、%s,%s\n じゃありません? なぜに%c ?
あ、すみません間違えました。%s,%s,\n です。
訂正に訂正を重ねてしまってすみませんm(_ _)m
上の場合 export.txt への書き込みはできるのですが、 export.csv/.xls への書き込
みができません。
どうすれば書き込めるようになりますか?
> fprintf(fp, %c, %c, \n, ss1, ss2);
出力は文字ではなく、文字列です。
fprintf(fp,%s,%s,\n,ss1,ss2);
>テキストへ書き込むのとCSVやExcelに書き込むのとでは何が違うのでしょうか?
CSVファイルは、データをカンマで区切っただけで、実体はテキストファイルです。
Excelファイルへの書き込みは、全くの別ものです。
CSVに書き込めませんか? う~ん、少し考えてみますが・・・。
↑のソース 中カッコの数がおかしい&最後のfclose(FILE* fp)はコンパイルエラーでは?
void CCsvDlg::OnButton1()
{
char mych[30], mych1[30], mych2[30];
CString ss, ss1, ss2;
CEdit* myED1 = (CEdit*) GetDlgItem(IDC_EDIT1);
CEdit* myED2 = (CEdit*) GetDlgItem(IDC_EDIT2);
myED1 -> GetWindowText (ss1); //ED1の文字列を取り出
myED2 -> GetWindowText (ss2); //ここまではOK
FILE *fp;
if((fp = fopen(.\\data\\export.csv,a)) == NULL)
{
AfxMessageBox( CSVファイルが開けません ,MB_OK |
MB_ICONEXCLAMATION);
return;
}
ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);
fprintf(fp,mych);
fclose(fp);
}
これでいけるでしょ
~.xlsは単純なテキスト形式ではありません。
(エクセルで適当に~.xlsを作ってテキストエディタで開いてみると何がなんだかわから
ないと思います。)
ですので、上のように単純にfprintとかでは書き込めません。
Officeのオートメーション機能を使って~.xlsを作ることは出来ますが、
今のレベルではちょっと理解できないかと思います。
(最悪手動で、~.csvから~.xlsを作ればいいですが。)
ちなみに、~.csvは単なるカンマ区切りのテキストファイルです。
>export.txt
を
export.csv
に変えて書き込めばcsvファイルの完成です。
一応解決いました。皆様、有難う御座いました。
元あった export.txt を export.csv へと拡張子だけ変えて作ったところ、そのCSV
ファイルには書き込むことができました。
助かりました。本当に有難う御座います。
ところで、何故 export.txt とは別に作っておいた export.csv には書き込めなかった
のでしょうか?
なぜ書き込めてないかを調べるには
fprintfの戻り値が負の値かどうか、
負の値ならGetLastError()でエラーコードを取得してみる
などですかね・・
fcloseの失敗の可能性も・・ある・・かな?
export.csvは、本当にCSVファイルですか?
テキストエディタで開いて、中身がカンマで区切られたデータになっているか
確認してみては如何でしょうか?
abc.txt → abc.csv → abc.xls → abc.txt
問題なし
abc.xls → abc.csv → abc.txt
abc.xls → abc.txt
ここで文字化けします。
元がtxtだと問題ないんですが(ちゃんとカンマでも区切られてます)、xlsを元にすると
txtに変換した際に文字化けしてしまいます。
>xlsを元にするとtxtに変換した際に文字化けしてしまいます。
当たり前です。
なぜかは説明済み。
>~.xlsは単純なテキスト形式ではありません。
>(エクセルで適当に~.xlsを作ってテキストエディタで開いてみると何がなんだかわか
ら
ないと思います。)
テキストに変換したいならば、Officeのオートメーション機能(COM)を使うしかないで
す。今のレベルでは(以下 略)
xlsファイルの拡張子を変えてtxtには出来ませんよ
xlsで作成したcsvを使用したいならcsv形式で保存を選択してcsvファイルを
作成しないといけません
そうすれば普通にテキストエディタでカンマ区切りのデータが表示できます
ちなみに
>abc.txt → abc.csv → abc.xls → abc.txt
~~~~~~~~
↑
これExcelでちゃんと開けますか?