====== C#エクセル編集 ====== ===== C#エクセル出力1 ===== グーグル先生調べ エクセルを使うと言うことで、ライブラリを追加しないとだめです。 プロジェクト > 参照の追加 >「COM」のタブ から *Microsoft Excel [適当なバージョン] Object Library *Microsoft Office [適当なバージョン] Object Library 以上2つを追加しました。 見ためはウィンドウにボタン一個貼り付けただけのものです。\\ ソースはだいぶ端折ってますが、分かる人しか見ないだろうからこれで良し。 using Excel=Microsoft.Office.Interop.Excel; private void button1_Click(object sender, EventArgs e){ Excel.Application app = new Excel.Application(); Microsoft.Office.Interop.Excel._Workbook wb = app.Workbooks.Add(Type.Missing); wb.Application.Visible = true; Excel._Worksheet ws = (Excel.Worksheet)wb.ActiveSheet; ws.Cells[1, 1] = "入力してみるテスト"; ws.Cells[5, 5] = "ここに入力"; } 一個しかないボタンを押すとエクセルが立ち上がり、A1とE5に文字が入力されているはずです。 **icrosoft.Office.Interop.Excel**はusingに入れてみたが、なんかうまく認識されなかったので、\\ 長ったらしくなりますが仕方なく全部書いてます。 usingの書き方がいつもと違うのがちょっとしたポイントかもしれない。 ===== C#エクセル入力 ===== 開くファイルは、A1~A20まで列数に対応する数字(例: A3 => 3 )が入ってます。そのほかに、B10に値「999」が入っています。 try { Excel.Application app = new Excel.Application(); //エクセルのファイルを開く Excel._Workbook wb = app.Workbooks.Open(@"C:\Book1.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);   //エクセルが起動 なくてもokっぽい wb.Application.Visible = true; Excel._Worksheet ws = (Excel.Worksheet)wb.Sheets[1]; <-一枚目のシート指定   //読み込む範囲の指定A1からB20までの範囲。セル数40 Excel.Range range=ws.get_Range("A1","B20"); object[,] saRet; saRet = (System.Object[,])range.get_Value(Missing.Value);   long iRows = saRet.GetUpperBound(0); long iCols = saRet.GetUpperBound(1); //表示させる文字列を作る(?)ループたち for (long rowCounter = 1; rowCounter <= iRows; rowCounter++) { for (long colCounter = 1; colCounter <= iCols; colCounter++) { if (saRet[rowCounter, colCounter] != null) <-参照なしがポイントです { valueString += String.Concat("値" + rowCounter + "," + colCounter + ":", saRet[rowCounter, colCounter].ToString() + "\n"); } } } MessageBox.Show(valueString); } catch (Exception ex) { MessageBox.Show(ex.Message); } ていうか、Microsoftのサポートページだかにあったものほぼそのままです。あえて言うなら、「参照なしがポイントです」の部分。 range.get_Value でObject型配列を取得しているけど、 特にB行は空欄のセルがあって、その部分はnullが入るので、nullをどうにかしないと 例外吐いて止まるので、そこだけです。 ===== C#エクセル出力2 ===== Excelファイルの末尾行にデータを追加するため、最終行を判定する部分。 適当に作ったFormには、ボタンが一つとテキストボックスが3つあり、値を読み込んで一番最後の列に追加します。 ワークシートの読込とかはコンストラクタで処理済みです。 private void button2_Click(object sender, EventArgs e) { object box1, box2, box3; box1 = textBox1.Text; box2 = textBox2.Text; box3 = textBox3.Text; ※ws=ワークシートを表すオブジェクト   long count=ws.UsedRange.Rows.Count; ws.Cells[count + 1, 1] = box1; ws.Cells[count + 1, 2] = box2; ws.Cells[count + 1, 3] = box3; } 型とかかなり適当です。 挙動としては、たとえばA行に3列、B行に4列入力されているとしたら、5列目に追加されます。 また、既存のファイルを読み込んでいるせいかもしれませんが、 データが何もない状態だと、countの値は”1”が返ってきます。 まあ、条件とかつければその辺どうとでもなるので・・・