是这样的,我3个月前做毕业设计时候问过这个问题,想把datagrid里的数据导出到EXCEL表格,当时碰到数据顺序混乱的问题就放弃了,但是现在做项目必须要实现这个功能.求个完整的方法...比较急,
因为以前搞过,所以只要老大们点化下,,就是数据怎么排,按原来的datagrid排序就可以,欢迎你们贴代码..谢谢各位了

解决方案 »

  1.   

    这种代码太多了吧
    http://www.jaron.cn/chs_scripts/9/2005-07/20050713014047-101704.html
      

  2.   

    public void ExportExcel(String FileName, DataSet ds)
            {
                if (ds == null) return;            string saveFileName = "";
                bool fileSaved = false;
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
                saveDialog.FileName = FileName;
                saveDialog.ShowDialog();
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消            Excel.Application xlApp = new Excel.Application();            if (xlApp == null)
                {
                    MessageBox.Show("无法创建Excel对象,可能您未安装Excel");
                    return;
                }            Excel.Workbooks workbooks = xlApp.Workbooks;
                Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
                Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
                Excel.Range range;            string oldCaption = pb_Export.Text;
                long totalCount = ds.Tables[0].Rows.Count;
                long rowRead = 0;
                float percent = 0;            //worksheet.Cells[1, 1] = "A座销售记录";
                //写入字段
                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                {
                    worksheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
                    range = (Excel.Range)worksheet.Cells[1, i + 1];
                    range.Interior.ColorIndex = 15;
                    range.Font.Bold = true;            }
                //写入数值
                pb_Export.Visible = true;
                for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
                {
                    for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                    {
                        worksheet.Cells[r + 2, i + 1] = "'" + ds.Tables[0].Rows[r][i];
                    }
                    rowRead++;
                    percent = ((float)(100 * rowRead)) / totalCount;
                    pb_Export.Position = Convert.ToInt32(percent);
                    pb_Export.Text = "正在导出数据[" + percent.ToString("0.00") + "%]...";
                    Application.DoEvents();
                }
                pb_Export.Visible = false;
                pb_Export.Text = oldCaption;            range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[ds.Tables[0].Rows.Count + 1, ds.Tables[0].Columns.Count]);
                range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
                range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
                range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;            if (ds.Tables[0].Columns.Count > 1)
                {
                    range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
                    range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
                    range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
                }            if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(saveFileName);
                        fileSaved = true;
                    }
                    catch (Exception ex)
                    {
                        fileSaved = false;
                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }
                }
                else
                {
                    fileSaved = false;
                }
                xlApp.Quit();
                GC.Collect();//强行销毁
                if (fileSaved && File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName);        }
      

  3.   

    调用代码如下ExportExcel("A座销售记录", ds);
      

  4.   

    如果是asp.net 上做的话建议用我贴的地址,毕竟性能会好一些,而且编码难度也会低点.
    ,winFOrm的话可以用楼上写的用interop.Office的方式
      

  5.   

    winForm窗体方面的代码有么?有的话老大们莫保留啊
    让我看看你们是怎么实现的
    我的问题是数据都是加在后面,没有按datagrid里的那么排列。导致数据混乱,那样导出的数据也就没有意义了。
      

  6.   

    在WINFORM中没做过,给你一个链接,是孟大哥的
    http://dotnet.aspx.cc/ShowDetail.aspx?id=4EB79F05-B9A4-4E8A-836F-864393F40405
      

  7.   

    winform的话用cctaiyang(小刀可乐) ( ) 信誉:100 的代码就行了,
    另外你要用-引用-Com-Excel
      

  8.   

    不知道我能放多少分...其实用Response输出比较简单
      

  9.   

    winform用COM比较方便..或者直接用STREAMWRITER
      

  10.   

    XtraGrid导出Excel只要一句话, 就怕你不会用。