C# - 将断开连接的数据集数据导出到Excel工作表

时间:2015-08-06 08:09:23

标签: c# excel ado

我正在使用ADO.Net。我需要将断开连接的数据集的表导出到Excel工作表。我可以导出整个数据集,但我需要导出一个表。

do
            {
                if (!reader.HasRows)
                {
                    MessageBox.Show("Empty Database");
                }
                else
                {

                    while (reader.Read())
                    {
                        j++;
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            Console.Write(reader[i] + " ");
                            xlWorkSheet.Cells[j, i + 1] = reader[i];
                        }
                        Console.WriteLine();
                    }
                }
            } while (reader.NextResult());

有人请帮助我。抱歉我的英语和解释。 感谢

1 个答案:

答案 0 :(得分:0)

这可能会对您有所帮助,此方法将数据表作为输入,您可以将dataSet.Tables [indexOfyouDatatable]或dataSet.Tables [&#34; yourdatatableName&#34;]作为参数。字符串参数strSheetname是将要导出的Excel工作表的名称,您可以在此处为数据表的表名提供。

public void exportDtToExcel(DataTable dt, string excelPath, string StrSheetName)
    {
        try
        {
            int ColumnCount;
            if (dt == null || (ColumnCount = dt.Columns.Count) == 0)
            {
                throw new Exception("Null or empty input table!\n");
            }

            Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();
            Excel.Workbooks.Add();

            Microsoft.Office.Interop.Excel._Worksheet Worksheet = Excel.ActiveSheet;

            object[] Header = new object[ColumnCount];                           
            for (int i = 0; i < ColumnCount; i++)
            {
                Header[i] = dt.Columns[i].ColumnName;
            }
            Microsoft.Office.Interop.Excel.Range HeaderRange = Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, ColumnCount]));
            HeaderRange.Value = Header;
            DataTable tempdtsheet;
            Worksheet = Excel.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);                
            {
                Worksheet.Name = StrSheetName;
                tempdtsheet = dt;
                Worksheet.Activate();
            }              
            Excel.Range cells = Worksheet.Cells;
            try
            {              
                for (int i1 = 0; i1 < ColumnCount; i1++)
                    Header[i1] = tempdtsheet.Columns[i1].ColumnName;
                Microsoft.Office.Interop.Excel.Range HeaderRange1 = Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, ColumnCount]));
                HeaderRange1.Value = Header;
                int RowsCount1 = tempdtsheet.Rows.Count;
                object[,] Cells1 = new object[RowsCount1, ColumnCount];

                for (int j = 0; j < RowsCount1; j++)
                    for (int i1 = 0; i1 < ColumnCount; i1++)
                    {
                        Cells1[j, i1] = tempdtsheet.Rows[j][i1];
                    }
                Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[2, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[RowsCount1 + 1, ColumnCount])).Value = Cells1;
                Worksheet.Columns.AutoFit();
                ////deleting other sheets
                ((Microsoft.Office.Interop.Excel.Worksheet)Excel.Worksheets["Sheet3"]).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)Excel.Worksheets["Sheet2"]).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)Excel.Worksheets["Sheet1"]).Delete();

            }
            catch (Exception e1)
            {
                MessageBox.Show("Error" + e1.Message, "Error!!!");
            }

            if (excelPath != null && excelPath != "")
            {
                try
                {
                    Worksheet.SaveAs(excelPath);
                    Excel.Quit();
                    MessageBox.Show("Output file is saved");
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                }
                catch (Exception ex)
                {
                    throw new Exception("Problem with File path." + ex.Message);
                }
                finally
                {
                    Marshal.ReleaseComObject(Worksheet);
                    Marshal.ReleaseComObject(Excel);
                    Worksheet = null;
                }
            }
            else
            {
                Excel.Visible = true;
            }
        }
        catch (Exception exc)
        {
            throw new Exception("Error in Exporting : " + exc.Message);
        }
    }