C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: C# でExcelデータを一行ずつ


(過去ログ 126 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■75243 / inTopicNo.1)  C# でExcelデータを一行ずつ取得して処理する方法
  
□投稿者/ にこにこたん (1回)-(2015/03/08(Sun) 18:09:36)

分類:[C#] 



C# でExcelデータを1行ずつ取得して処理する方法

初めまして!C# とVSの初心者です。
急ぎで作りたいものがあって
サンプルを参考にしているのですが解決できず困って投稿させていただきます。

言語はC#
VisualStudio2008
compornentOneを入れてExcel操作をしようとしています。

やりたいことはこうです。

@Excelブック(DATA_IN.xlsx)のSheet1の(A1)セルにあるデータを取得
A取得したデータに変換をかける
B変換をかけたデータを別のExcel(DATA_OUT.xlsx)の取得ファイルと同じセル(Sheet1の(A1)セル)に出力
CA2セルに移る→@からまたループでデータ行がなくなるまで1行ずつ処理する


これを以下のように書いてみましたが
1回のループで、INファイルのシートごとデータ取得し、
そのままOUTファイルにコピーされているような動きになっているように見えます。

このソースで、1行ずつの処理にさせるには
どこをどう直したらよいのでしょうか?



//Excel読み込み
C1XLBook wb = new C1XLBook();
int i = 0;

wb.Load(@"C:\DATA_IN.xlsx");

XLSheet sheet1 = wb.Sheets["Sheet1"];
string data = "";

i = 1;
do
{
i += 1;
data = (String)sheet1[i, 0].Value;
if (data != null)
{
XLSheet xlSheet = wb.Sheets["Sheet1"];

if (i == 0)
{
return;
}

//excel出力
sheet1[i, 0].Value = data;
wb.Save(@"C:\DATA_OUT.xlsx");

}
} while (data != null);


簡単な内容を質問してすみませんが、時間なく急いでおりまして、
どなたか回答くださると助かります。

よろしくお願いいたします。
引用返信 編集キー/
■75246 / inTopicNo.2)  Re[1]: C# でExcelデータを一行ずつ
□投稿者/ Azulean (448回)-(2015/03/08(Sun) 21:34:19)
2015/03/08(Sun) 21:37:39 編集(投稿者)
No75243 (にこにこたん さん) に返信
> 簡単な内容を質問してすみませんが、時間なく急いでおりまして、
> どなたか回答くださると助かります。

まずは厳しいことを書いておきますが、この内容で質問をされてしまう状況で「時間なく急いで」作ると、失敗することが多いです。
アルゴリズムが思いつかない、たどり着かないということは、基礎の理解が不足しているか、応用できるほどに力をつけられていないと考えられるためです。


--- 以下修正済み(3/8 21:36) ----

> 1回のループで、INファイルのシートごとデータ取得し、
> そのままOUTファイルにコピーされているような動きになっているように見えます。

この話は振る舞いから発言されているのですか?
それとも、ソースコードの見た目の話ですか?


> このソースで、1行ずつの処理にさせるには
> どこをどう直したらよいのでしょうか?

どのようにうまく動いていないかを説明してください。
とりあえず、ワークブックの保存は do-while ループの外に書いた方がよいでしょう。
(i == 0 になることがないとか、xlSheet という変数が使われていないとかツッコミどころはありますが…)

引用返信 編集キー/
■75249 / inTopicNo.3)  Re[2]: C# でExcelデータを一行ずつ
□投稿者/ にこにこたん (2回)-(2015/03/08(Sun) 23:27:34)
ご指摘&回答ありがとうございます!

> まずは厳しいことを書いておきますが、この内容で質問をされてしまう状況で「時間なく急いで」作ると、失敗することが多いです。
> アルゴリズムが思いつかない、たどり着かないということは、基礎の理解が不足しているか、応用できるほどに力をつけられていないと考えられるためです。
まさにご指摘通りです。
基礎からテキスト読みましたが、いざ組むとなると
つまづいてばかりです。でも仕上げなくてはいけない状況で
せめてヒントでも、とおもい、投稿しました。

> この話は振る舞いから発言されているのですか?
> それとも、ソースコードの見た目の話ですか?
動き、と書いてますので振る舞いのことです。

> どのようにうまく動いていないかを説明してください。
とりあえずは1行ずつ取得したいのですが
1度目で全行取得してしまうため、Aを組み込めてません。
、うまくいってない箇所です。


> とりあえず、ワークブックの保存は do-while ループの外に書いた方がよいでしょう。
> (i == 0 になることがないとか、xlSheet という変数が使われていないとかツッコミどころはありますが…)
保存処理をループの外に、ですね。たしかに。。ヒントをありがとうございます!






引用返信 編集キー/
■75250 / inTopicNo.4)  Re[3]: C# でExcelデータを一行ずつ
□投稿者/ Azulean (450回)-(2015/03/08(Sun) 23:34:58)
2015/03/08(Sun) 23:35:49 編集(投稿者)

No75249 (にこにこたん さん) に返信
>>どのようにうまく動いていないかを説明してください。
> とりあえずは1行ずつ取得したいのですが
> 1度目で全行取得してしまうため、Aを組み込めてません。
> 、うまくいってない箇所です。

「1度目で全行取得してしまうため」と書かれていますが、そのように判断した理由を述べてください。
提示されているコードを読む限り、私はその見方に同意できませんので。


-----
提示されているコードは、1セルのデータを取り出して data 変数に代入し、同じセルに data 変数の内容を代入し、ワークブックの保存を繰り返して全行処理するものです。
あなたの要求に近い形のループになっていますが、そのことはご理解いただいていますか?

(ループの中にデータを書き換える処理を置くという発想に持って行けていない?)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -