如何用c#将DataTable 数据导出到Execl

将DataTable 数据导出到Execl格式
源代码如下:
首先new一个保存的对话框:
 

        private System.Windows.Forms.SaveFileDialog m_objSave = new SaveFileDialog();
//导出数据方法
        public void m_mthExportToExecl()
        {
            this.m_objSave.DefaultExt = "xls";
            this.m_objSave.Filter = "Excel文件(*.xls)|*.xls";

            if (this.m_objSave.ShowDialog() == DialogResult.OK)
            {
                m_mthDoExport(dtFindCharge, m_objSave.FileName);
            }

        }
//具体导出的方法
        private void m_mthDoExport(DataTable dtSource, string strFileName)
        {
            int rowNum = dtSource.Rows.Count;
            int columnNum = dtSource.Columns.Count;
            int rowIndex = 1;
            int columnIndex = 0;

            if (dtSource == null || string.IsNullOrEmpty(strFileName))
            {
                return;
            }
            if (rowNum > 0)
            {
                Excel.Application xlApp = new Excel.ApplicationClass();
                xlApp.DefaultFilePath = "";
                xlApp.DisplayAlerts = true;
                xlApp.SheetsInNewWorkbook = 1;
                Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
                //将DataTable的列名导入Excel表第一行
                foreach (DataColumn dc in dtSource.Columns)
                {
                    columnIndex++;
                    xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;
                }
                //将DataTable中的数据导入Excel中
                for (int i = 0; i < rowNum; i++)
                {
                    rowIndex++;
                    columnIndex = 0;
                    for (int j = 0; j < columnNum; j++)
                    {
                        columnIndex++;
                        xlApp.Cells[rowIndex, columnIndex] = dtSource.Rows[i][j].ToString();
                    }
                }
                xlBook.SaveCopyAs(strFileName);
                xlApp = null;
                xlBook = null;
            }
        }

 

 

 

 

C#导出Excel的主要方法如下:
代码:
          public void CellToCell(DataSet ds)
        {
            #region 实例化所需对象
            // 实例化一个Excel文档对象
            Microsoft.Office.Interop.Excel.Application exapp = new Microsoft.Office.Interop.Excel.Application();
            // 设置可见
            // 如果为false的话,会造成看不到Excel文档的情况
            exapp.Visible = true;
            // 设置工作簿格式
            Microsoft.Office.Interop.Excel.Workbook myworkbook = exapp.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            // 实例化工作表集
            Microsoft.Office.Interop.Excel.Sheets mysheets = myworkbook.Worksheets;
            // 实例化工作表
            Microsoft.Office.Interop.Excel.Worksheet mysheet = (Microsoft.Office.Interop.Excel.Worksheet)mysheets.get_Item(1);
            #endregion

            #region 具体操作
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
                {
                    Console.Write("\t{0}\t|", j);
                    mysheet.Cells[i+1, j+1] = ds.Tables[0].Rows[i][j].ToString();
                }
                Console.WriteLine();
            }
            #endregion
            MessageBox.Show("导出完毕,请不要忘记保存导出成功的文件!");
            exapp.Caption = "Excel Demo 测试文件";
        }
 
 
注意:
1. 引用的DLL版本与客户机安装的Office版本的匹配
2. 「异常来自 HRESULT:0x800A03EC」这个可能是由于单元格索引的问题所引起的,Excel第一个单元格是1,1 而不是0,0

 

posted @ 2020-03-01 16:31  曾小慧  阅读(1438)  评论(0编辑  收藏  举报