我从数据库里查出来的数据放到datatable表里,格式如下area     time                        content
01       2012-04-17 08:00:00           优
02       2012-04-17 08:00:00           优
03       2012-04-17 08:00:00           一般
......
请问怎么实现向我的excel表中写入数据:表名为1.xls
想实现area列的数据写入这个表的第三列,time列的数据写入这个表的第四列,content
列的数据写入这个表的第五列,都是从每列的第二行写入数据(第一行是列的标题),请问大家怎么实现?

解决方案 »

  1.   

    循环控制行和列,挨个写入了。代码要自己写。
    如果不想这么乱的行列对应。
    可以对select语句调整成与excel列一一对应。
    这样写循环赋值就好控制了。
      

  2.   

    private void toolStripButton4_Click(object sender, EventArgs e)
                {
                    DataTable dt = new DataTable();
                    dt=shujuchuli.gethuizongxinxi().Tables[0];
                    //printAll(dt);
                   // MessageBox.Show("数据导出成功!");
                    Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();
                    SaveFileDialog savefiledialog = new SaveFileDialog();
                    System.Reflection.Missing miss = System.Reflection.Missing.Value;
                    appexcel = new Microsoft.Office.Interop.Excel.Application();
                    Microsoft.Office.Interop.Excel.Workbook workbookdata;
                    Microsoft.Office.Interop.Excel.Worksheet worksheetdata;
                    Microsoft.Office.Interop.Excel.Range rangedata;
                    //设置对象不可见
                    appexcel.Visible = false;
                    System.Globalization.CultureInfo currentci = System.Threading.Thread.CurrentThread.CurrentCulture;
                    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");
                    workbookdata = appexcel.Workbooks.Add(miss);
                    worksheetdata = (Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets.Add(miss, miss, miss, miss);
                    //给工作表赋名称
                    worksheetdata.Name = "saved";
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        worksheetdata.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
                    }
                    //因为第一行已经写了表头,所以所有数据都应该从a2开始
                    rangedata = worksheetdata.get_Range("a2", miss);
                    Microsoft.Office.Interop.Excel.Range xlrang = null;
                    //irowcount为实际行数,最大行
                    int irowcount = dt.Rows.Count;
                    int iparstedrow = 0, icurrsize = 0;
                    //ieachsize为每次写行的数值,可以自己设置
                    int ieachsize = 10000;
                    //icolumnaccount为实际列数,最大列数
                    int icolumnaccount = dt.Columns.Count;
                    //在内存中声明一个ieachsize×icolumnaccount的数组,ieachsize是每次最大存储的行数,icolumnaccount就是存储的实际列数
                    object[,] objval = new object[ieachsize, icolumnaccount];
                    icurrsize = ieachsize;
                    while (iparstedrow < irowcount)
                    {
                        if ((irowcount - iparstedrow) < ieachsize)
                            icurrsize = irowcount - iparstedrow;
                        //用for循环给数组赋值
                        for (int i = 0; i < icurrsize; i++)
                        {
                            for (int j = 0; j < icolumnaccount; j++)
                                objval[i, j] = dt.Rows[i + iparstedrow][j].ToString();
                            System.Windows.Forms.Application.DoEvents();
                        }
                        string X = "A" + ((int)(iparstedrow + 2)).ToString();
                        string col = "";
                        if (icolumnaccount <= 26)
                        {
                            col = ((char)('A' + icolumnaccount - 1)).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();
                        }
                        else
                        {
                            col = ((char)('A' + (icolumnaccount / 26 - 1))).ToString() + ((char)('A' + (icolumnaccount % 26 - 1))).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();
                        }
                        xlrang = worksheetdata.get_Range(X, col);
                        // 调用range的value2属性,把内存中的值赋给excel
                        xlrang.Value2 = objval;
                        iparstedrow = iparstedrow + icurrsize;
                    }
                    //保存工作表
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlrang);
                    xlrang = null;
                    //调用方法关闭excel进程
                    appexcel.Visible = true;
                }
              }
    参考