csharp: Export DataSet into Excel and import all the Excel sheets to DataSet

 /// <summary>
        /// Export DataSet into Excel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form3_Load(object sender, EventArgs e)
        {
            //Create an Emplyee DataTable
            DataTable employeeTable = new DataTable("Employee");
            employeeTable.Columns.Add("Employee ID");
            employeeTable.Columns.Add("Employee Name");
            employeeTable.Rows.Add("1", "涂聚文");
            employeeTable.Rows.Add("2", "geovindu");
            employeeTable.Rows.Add("3", "李蘢怡");
            employeeTable.Rows.Add("4", "ноппчц");
            employeeTable.Rows.Add("5", "ニヌネハヒフキカォноппчц");
            //Create a Department Table
            DataTable departmentTable = new DataTable("Department");
            departmentTable.Columns.Add("Department ID");
            departmentTable.Columns.Add("Department Name");
            departmentTable.Rows.Add("1", "IT");
            departmentTable.Rows.Add("2", "HR");
            departmentTable.Rows.Add("3", "Finance");

            //Create a DataSet with the existing DataTables
            DataSet ds = new DataSet("Organization");
            ds.Tables.Add(employeeTable);
            ds.Tables.Add(departmentTable);

            ExportDataSetToExcel(ds);
        }

        /// <summary>
        /// This method takes DataSet as input paramenter and it exports the same to excel
        /// </summary>
        /// <param name="ds"></param>
        private void ExportDataSetToExcel(DataSet ds)
        {
            //Creae an Excel application instance
            //EXCEL组件接口
            System.Reflection.Missing miss = System.Reflection.Missing.Value;
            Excel.Application excelApp = new Excel.Application();
            excelApp.Application.Workbooks.Add(true);
            string timeMark = DateTime.Now.ToString("yyyyMMddHHmmss");
            string FilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "geovindu" + timeMark + ".xlsx");
            //Create an Excel workbook instance and open it from the predefined location
            //Excel.Workbook excelWorkBook = excelApp.Workbooks.Open(FilePath);
            Excel.Workbooks books = (Excel.Workbooks)excelApp.Workbooks;
            Excel.Workbook excelWorkBook = (Excel.Workbook)books.Add(miss);
            foreach (DataTable table in ds.Tables)
            {
                //Add a new worksheet to workbook with the Datatable name
                Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();
                excelWorkSheet.Name = table.TableName;

                for (int i = 1; i < table.Columns.Count + 1; i++)
                {
                    excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
                }

                for (int j = 0; j < table.Rows.Count; j++)
                {
                    for (int k = 0; k < table.Columns.Count; k++)
                    {
                        excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
                    }
                }
            }

            excelWorkBook.SaveAs(FilePath, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, System.Text.Encoding.UTF8, miss, miss);
            excelWorkBook.Close(false, miss, miss);
            //excelWorkBook.Save();
            books.Close();
            excelApp.Quit();

        }

  

 /// <summary>
        /// EXCEL表的所有工作表导入到DataSet
        /// 涂聚文 Microsoft.ACE.OLEDB.12.0
        /// Geovin Du
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        static DataSet  ImportExcelParse(string fileName)
        {
            string connectionString = string.Format("provider=Microsoft.Jet.OLEDB.4.0; data source={0};Extended Properties=Excel 8.0;", fileName);


            DataSet data = new DataSet();

            foreach (var sheetName in GetExcelSheetNames(connectionString))
            {
                using (OleDbConnection con = new OleDbConnection(connectionString))
                {
                    var dataTable = new DataTable();
                    string query = string.Format("SELECT * FROM [{0}]", sheetName);
                    con.Open();
                    OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
                    adapter.Fill(dataTable);
                    data.Tables.Add(dataTable);
                }
            }

            return data;
        }
        /// <summary>
        /// 读取所有工作表名
        /// </summary>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        static string[] GetExcelSheetNames(string connectionString)
        {
            OleDbConnection con = null;
            DataTable dt = null;
            con = new OleDbConnection(connectionString);
            con.Open();
            dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            if (dt == null)
            {
                return null;
            }

            String[] excelSheetNames = new String[dt.Rows.Count];
            int i = 0;

            foreach (DataRow row in dt.Rows)
            {
                excelSheetNames[i] = row["TABLE_NAME"].ToString();
                i++;
            }

            return excelSheetNames;
        }

  

 /// <summary>
        /// 添加图片
        /// 涂聚文
        /// </summary>
        /// <param name="dt"></param>
        protected void ExportExcelImg(System.Data.DataTable dt) 
         { 
             if (dt == null || dt.Rows.Count == 0) return; 
             Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();    
             if (xlApp == null) 
             { 
                 return; 
             }
             xlApp.Application.Workbooks.Add(true);
             string timeMark = DateTime.Now.ToString("yyyyMMddHHmmss");
             string FilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "geovindu" + timeMark + ".xlsx");

             System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture; 
             System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
             Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; 
             Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); 

             Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; 
             Microsoft.Office.Interop.Excel.Range range;
             System.Reflection.Missing miss = System.Reflection.Missing.Value;
             long totalCount = dt.Rows.Count; 
             long rowRead = 0; 
             float percent = 0; 
             for (int i = 0; i < dt.Columns.Count; i++) 
             { 
                 worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName; 
                 range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]; 
                 range.Interior.ColorIndex = 15; 
             } 
             for (int r = 0; r < dt.Rows.Count; r++) 
             { 
                 for (int i = 0; i < dt.Columns.Count; i++) 
                 { 
                     try 
                     { 
                         worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString(); 
                     } 
                     catch 
                     { 
                         worksheet.Cells[r + 2, i + 1] = 
		        dt.Rows[r][i].ToString().Replace("=", ""); 
                     } 
                 } 
                 rowRead++; 
                 percent = ((float)(100 * rowRead)) / totalCount; 
             }
             string strimg =Application.StartupPath+@"/IMG_6851.JPG";
             worksheet.Shapes.AddPicture(strimg, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 100, 200, 200, 300); 
            //在添加的图片上加文字
             worksheet.Shapes.AddTextEffect(Microsoft.Office.Core.MsoPresetTextEffect.msoTextEffect1, "涂聚文写上", "Red", 15, Microsoft.Office.Core.MsoTriState.msoFalse,Microsoft.Office.Core.MsoTriState.msoTrue, 150, 200); 
             xlApp.Visible = true;

             workbook.SaveAs(FilePath, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, System.Text.Encoding.UTF8, miss, miss);
             workbook.Close(false, miss, miss);
             //excelWorkBook.Save();
             workbooks.Close();
             xlApp.Quit();
         }

  

        /// <summary>
        /// GirdView转换成DataTable
        /// 20150813 
        /// 涂聚文
        /// </summary>
        /// <param name="dgv"></param>
        /// <returns></returns>
        public static DataTable GetGirdViewToTableHeaderText(DataGridView dgv)
        {
            DataTable dt = new DataTable();
            try
            {                
                for (int count = 0; count < dgv.Columns.Count; count++)
                {
                    if (dgv.Columns[count].Visible == true)
                    {
                        DataColumn dc = new DataColumn(dgv.Columns[count].HeaderText);
                        dt.Columns.Add(dc);
                    }

                }
                for (int count = 0; count < dgv.Rows.Count; count++)
                {
                    DataRow dr = dt.NewRow();
                    for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
                    {
                        if (dgv.Columns[count].Visible == true)
                        {
                            //if (dgv[countsub, count].ValueType == typeof(string))
                            //{
                            //    dr[countsub] = "'" + dgv.Rows[count].Cells[countsub].Value;
                            //}
                            //else
                            //{
                                dr[countsub] = dgv.Rows[count].Cells[countsub].Value;
                            //}
                            
                        }

                    }
                    dt.Rows.Add(dr);


                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
            }
            return dt;
        }

        /// <summary>
        /// List 转DataTable
        /// 涂聚文
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
         public static DataTable ConvertListToDataTable(List<string[]> list)
        {
            // New table.
            DataTable table = new DataTable();

            // Get max columns.
            int columns = 0;
            foreach (var array in list)
            {
                if (array.Length > columns)
                {
                    columns = array.Length;
                }
            }

            // Add columns.
            for (int i = 0; i < columns; i++)
            {
                table.Columns.Add();
            }

            // Add rows.
            foreach (var array in list)
            {
                table.Rows.Add(array);
            }

            return table;
        }

  

        /// <summary>
        /// 涂聚文
        /// 2015.08.18
        /// </summary>
        /// <param name="dataGridView"></param>
        /// <returns></returns>
        public static DataTable DataGridViewToDataTable(DataGridView dataGridView)
        {

            DataTable dt = new DataTable();
            try
            {
                foreach (DataGridViewColumn col in dataGridView.Columns)
                {
                    if (col.Visible == true)
                    {
                        dt.Columns.Add(col.HeaderText, col.ValueType);
                    }
                }
                foreach (DataGridViewRow gridRow in dataGridView.Rows)
                {
                    if (gridRow.IsNewRow)
                        continue;
                    int irow = 0;
                    DataRow dtRow = dt.NewRow();
                    for (int i1 = 0; i1 < dataGridView.Columns.Count; i1++)
                    {
                        if (dataGridView.Columns[i1].Visible == true)
                        {
                            dtRow[irow] = (gridRow.Cells[i1].Value == null ? DBNull.Value : gridRow.Cells[i1].Value);
                            irow++;
                        }

                    }
                    dt.Rows.Add(dtRow);
                }
                //ds.Tables.Add(dt);
                //System.Diagnostics.Debugger.Break();
            }
            catch (Exception ex)
            {
               MessageBox.Show(ex.Message.ToString());
            }
            return dt;

        }
        /// <summary>
        /// 涂聚文
        /// </summary>
        /// <param name="dgv"></param>
        /// <returns></returns>
        public static DataTable GetGirdViewToTableHeaderText(DataGridView dgv)
        {

            //DataGridViewColumnCollection

            DataTable dt = new DataTable();
            try
            {
                //标题
                for (int count = 0; count < dgv.Columns.Count; count++)
                {
                    if (dgv.Columns[count].Visible == true)
                    {
                        DataColumn dc = new DataColumn(dgv.Columns[count].HeaderText, dgv.Columns[count].ValueType);
                        dt.Columns.Add(dc);
                    }

                }

                for (int count = 0; count < dgv.Rows.Count; count++)
                {
                    int irow = 0;
                   DataRow dr = dt.NewRow();
                     //DataRow dr = dt.Rows.Add();
                    for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
                    {
                        if (dgv.Columns[countsub].Visible == true)
                        {
                            //if (dgv[countsub, count].ValueType == typeof(string))
                            //{
                            //    dr[countsub] = "'" + dgv.Rows[count].Cells[countsub].Value;
                            //}
                            //elsedt.Rows[countsub][count]
                            //{
                            //dr[countsub] = dgv[countsub, count].Value;// dgv.Rows[count].Cells[countsub].Value;
                            dr[irow] = dgv.Rows[count].Cells[countsub].Value; // dgv[countsub, count].Value;
                            //}


                           irow++;
                        }

                    }
                    dt.Rows.Add(dr);

                    
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            return dt;
        }

  

原文地址:https://www.cnblogs.com/geovindu/p/4635407.html