- PR -

Excelへのデータ移行[C#]

投稿者投稿内容
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2003-11-25 10:38
追加と修正です。
配列要素数の取得部分の修正と、ヘッダ情報の表示を行いました。

コード:
private string[] GetHeaderArray()
{
    DataView dv = GetDataView();
    string[] ret = new string[dv.Table.Columns.Count];
    for (int i = 0;i<ret.Length;i++)
    {
        ret[i] = dv.Table.Columns[i].Caption;
    }
    return ret;
}

private void button1_Click(object sender, System.EventArgs e)
{
    Excel.Application exApp;
    Excel._Workbook wkBook;
    Excel.Workbooks wkBooks;
    Excel.Sheets wkSheets;
    Excel._Worksheet wkSheet;
    Excel.Range range;

    try
    {
        exApp = new Excel.Application();
        wkBooks = exApp.Workbooks;
        wkBook = wkBooks.Add(Missing.Value );
        wkSheets = wkBook.Worksheets;
        wkSheet = (Excel._Worksheet)wkSheets.get_Item(1);

        string[] headstr = GetHeaderArray();
        for(int i = 0;i<headstr.Length;i++)
        {
            wkSheet.Cells[1,i+1] = headstr[i];
        }

        range = wkSheet.get_Range("A2", Missing.Value);
        int[,] dataValue = GetDataArray();
        int r = dataValue.GetLength(0);
        int c = dataValue.GetLength(1);
        range = range.get_Resize(r,c);
        range.set_Value(Missing.Value,dataValue);
        exApp.Visible = true;
        exApp.UserControl = true;
    }
    catch(Exception ex ) 
    {
        MessageBox.Show(ex.Message,"Error");
    }
}



_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-25 11:36
引用:

soltさんの書き込み (2003-11-25 05:50) より:

書き直してみたんですが、やはり移送できませんでした。
dataViewの最下行のみが任意の範囲に全て表示されてしまいます。


 諸農さんと重なりますが、「どういうコードを試して」、「どういう結果になった」のか、教えてください。「やはり移送できませんでした」だけでは、何が悪いのか、皆目見当もつきません。

 それで、最下行のみが任意の範囲全てに表示されるということは、データビュー側の行列を回していない、ということが考えられるのですが、その辺のチェックはしましたか?


※例えば、
for(int r = 0;r < dataView.Count;r++)
{
for(int row = 0;row < dataView.Count;row++)
{
sheet.Cell[row,1] = Convert.Toint32(dataGrid.Item[r][0]);
sheet.Cell[row,2] = Convert.Toint32(dataGrid.Item[r][1]);
sheet.Cell[row,3] = Convert.Toint32(dataGrid.Item[r][2]);
sheet.Cell[row,4] = Convert.Toint32(dataGrid.Item[r][3]);
}
}
・・・というコードで、

   列1 列2
−−−−−−−−
行1 11 12
行2 21 22
行3 31 32
行4 41 42

というデータを移すと、

   A  B
−−−−−−−
1 41 42
2 41 42
3 41 42
4 41 42

となった。
・・・・というように書いてもらわないと、わかりません。



……こう書いてわかった。
//for(int r = 0;r < dataView.Count;r++)
//{

for(int row = 0;row < dataView.Count - 1;row++)
{
sheet.Cell[row,1] = Convert.Toint32(dataGrid.Item[row][0]);
sheet.Cell[row,2] = Convert.Toint32(dataGrid.Item[row][1]);
sheet.Cell[row,3] = Convert.Toint32(dataGrid.Item[row][2]);
sheet.Cell[row,4] = Convert.Toint32(dataGrid.Item[row][3]);
}
//}


[ メッセージ編集済み 編集者: Jitta 編集日時 2003-11-25 11:40 ]
solt
会議室デビュー日: 2003/08/12
投稿数: 14
投稿日時: 2003-11-25 18:56
ご指導ありがとうございます。
for文がまわってなく最下行のみになっていました。
for文を1つにすることで解決しました。
本当に長くなってしまいすいません。
未熟者ですがこれからもご指導お願いいたします。

スキルアップ/キャリアアップ(JOB@IT)