C#中数据库数据如何导出至Excel表格

    有时候需要将数据库的数据导出至Excel表格表格,以便进行查看和分析,那么如何导出呢?下面用代码来实现。
    首先,新建一个工程,需要添加引用Microsoft.Office.Interop.Excel.dll,以Oracle数据库为例(只要读出DataTable或DataSet就行了,哪种数据库没关系)。

1、创建一个表格,并插入如下数据。

drop table TABLETESTEXCEL;
create table TABLETESTEXCEL
(
  col_id   NUMBER not null,
  col_name VARCHAR2(32),
  col_age  NUMBER,
  col_sex  VARCHAR2(4),
  col_work VARCHAR2(32),
  col_mony FLOAT
);

数据:

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (1, '吴一', 25, '男', '.NET', 5000);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (2, '孙二', 24, '男', 'JAVA', 4999);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (3, '张三', 25, '男', 'PHP', 5001);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (4, '李四', 26, '男', 'DELPHI', 5002);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (5, '王五', 27, '男', 'C++', 5003);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (6, '赵六', 25, '男', 'C', 4008);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (7, '燕七', 25, '男', '数据库', 4007);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (8, '胡八', 25, '男', 'JSP', 5005);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (9, '钱九', 25, '男', 'ASP.NET', 4005);

insert into TABLETESTEXCEL (col_id, col_name, col_age, col_sex, col_work, col_mony)
values (10, '沈十', 25, '男', 'VB', 4000);
commit;

2、C#代码实现

数据库操作的类:

public class DataBaseHelper
 {
    public static DataTable ExecuterQuery(string connectionString, string commandSql)
    {
        DataTable dataTable = new DataTable();

        try
        {
          using (OracleConnection oracleConnection = 
          new OracleConnection(connectionString))
          {
            oracleConnection.Open();

            using (OracleDataAdapter oracleDataAdapter = 
            new OracleDataAdapter(commandSql,oracleConnection))
                {
                   oracleDataAdapter.Fill(dataTable);
                }

                oracleConnection.Close();
          }
        }
        catch
        {
          return null;
        }

     return dataTable;
    }
 }
public class DataBaseDao
{
   public static DataTable GetDataBaseTable()
   {
      string sql = " SELECT * FROM tableTestExcel";

      return DataBaseHelper.ExecuterQuery("User ID=downsoft;Password=sys;Data Source=orcl", sql);
   }
}

 导出Excel的类:

public class DataChangeExcel
{
        /// <summary>
        /// 数据库转为excel表格
         /// </summary>
       /// <param name="dataTable">数据库数据</param>
       /// <param name="SaveFile">导出的excel文件</param>
        public static void DataSetToExcel(DataTable dataTable, string SaveFile)
        {
            Excel.Application excel;

            Excel._Workbook workBook;

            Excel._Worksheet workSheet;

            object misValue = System.Reflection.Missing.Value;

            excel = new Excel.ApplicationClass();

            workBook = excel.Workbooks.Add(misValue);

            workSheet = (Excel._Worksheet)workBook.ActiveSheet;

            int rowIndex = 1;

            int colIndex = 0;

            //取得标题
            foreach (DataColumn col in dataTable.Columns)
            {
                colIndex++;

                excel.Cells[1, colIndex] = col.ColumnName;
            }

            //取得表格中的数据
            foreach (DataRow row in dataTable.Rows)
            {
                rowIndex++;

                colIndex = 0;

                foreach (DataColumn col in dataTable.Columns)
                {
                   colIndex++;

                   excel.Cells[rowIndex, colIndex] = 
                        
                        row[col.ColumnName].ToString().Trim();

                    //设置表格内容居中对齐
                      workSheet.get_Range(excel.Cells[rowIndex, colIndex], 
                        
                        excel.Cells[rowIndex, colIndex]).HorizontalAlignment = 
                        
                        Excel.XlVAlign.xlVAlignCenter;
                }
            }

            excel.Visible = false;

            workBook.SaveAs(SaveFile, Excel.XlFileFormat.xlWorkbookNormal, misValue, 

                misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, 
                
                misValue, misValue, misValue, misValue, misValue);

            dataTable = null;

            workBook.Close(true, misValue, misValue);

            excel.Quit();

            PublicMethod.Kill(excel);//调用kill当前excel进程

            releaseObject(workSheet);

            releaseObject(workBook);

            releaseObject(excel);

        }

        private static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch
            {
                obj = null;
            }
            finally
            {
                GC.Collect();
            }
        }
 }

关闭进程的类:

public class PublicMethod
{
   [DllImport("User32.dll", CharSet = CharSet.Auto)]

   public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);

   public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
   {
       try
       {
         IntPtr t = new IntPtr(excel.Hwnd);

         int k = 0;

         GetWindowThreadProcessId(t, out k);

         System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
               
         p.Kill(); 
        }
        catch
        { }
   }
}

写好了如上的类,那么开始调用吧,调用:

DataChangeExcel.DataSetToExcel(DataBaseDao.GetDataBaseTable(), 
@"F:\outputFormDataBase.xls");

这样成功将数据导出,如图。

 

  • 19
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
可以使用以下步骤来实现: 1. 创建一个定时任务,每隔一定时间执行一次。 2. 在任务连接SQL数据库,并查询需要导出数据。 3. 创建一个Excel文件,并将查询结果写入该文件。 4. 如果文件已经存在,则将查询结果添加到现有文件。 5. 将文件保存到指定位置。 下面是一份示例代码,可以作为参考: ```csharp using System; using System.Data.SqlClient; using System.Data; using System.IO; using Microsoft.Office.Interop.Excel; namespace ExportToExcel { class Program { static void Main(string[] args) { // 连接数据库 string connectionString = "Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=True"; string query = "SELECT * FROM YourTableName"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, connection); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // 创建Excel文件 Application application = new Application(); Workbook workbook = application.Workbooks.Add(); Worksheet worksheet = workbook.ActiveSheet; // 将数据写入Excel文件 int row = 1; foreach (DataRow dataRow in dataTable.Rows) { for (int col = 0; col < dataTable.Columns.Count; col++) { worksheet.Cells[row, col + 1] = dataRow[col].ToString(); } row++; } // 保存Excel文件 string filePath = @"C:\YourFilePath\YourFileName.xlsx"; if (File.Exists(filePath)) { workbook.SaveAs(filePath, XlFileFormat.xlOpenXMLWorkbook); } else { workbook.SaveAs(filePath); } // 关闭Excel文件和应用程序 workbook.Close(); application.Quit(); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值