c#中将DataSet导出到Excel

本文介绍了一种使用C#将数据集(DataSet)中的数据导出到Excel的方法。该方法通过创建Excel应用程序对象,定义工作簿和工作表,并填充数据集的内容,实现了数据的自动导出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >





private bool outExcel(string fn, DataSet ds)
        {
            
const int START_ROW = 2//开始行
            const int START_COL = 1//开始列

            
int iRows = 0;
            
int iColumns = 0;
            System.Data.DataTable dt 
= new System.Data.DataTable();
            dt 
= (System.Data.DataTable)ds.Tables["t1"];

            iRows 
= dt.Rows.Count; //获得记录行数
            iColumns = dt.Columns.Count; //获得记录列数
            if (iRows <= 0) { MessageBox.Show("无记录,无法导出报表!"); return false; }


            
try
            {

                Excel.Application excel 
= new Excel.ApplicationClass();
                Excel.Workbooks Wbs 
= (Excel.Workbooks)excel.Workbooks; 
                Excel.Workbook xBk 
= (Excel.Workbook)(Wbs.Add(miss));
                Excel.Worksheet xSt 
= (Excel.Worksheet)xBk.ActiveSheet;
                Excel.Range excelCell 
= null;
                excel.ScreenUpdating 
= false//关屏幕更新
                excel.Visible = false//禁止显示excel
                excel.DisplayAlerts = false//禁止警告


       
//添加列
                for (int lc = 0; lc <= iColumns - 1; lc++)
                {
                    ((Excel.Range)xSt.Cells[START_ROW 
- 1, lc + START_COL]).FormulaR1C1 = dt.Columns[lc].ToString();
                    ((Excel.Range)xSt.Cells[START_ROW 
- 1, lc + START_COL]).Font.Bold = true//粗体
                    ((Excel.Range)xSt.Cells[START_ROW - 1, lc + START_COL]).Borders.LineStyle = 1//设置边框
                    ((Excel.Range)xSt.Cells[START_ROW - 1, lc + START_COL]).VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; //水平居中
                    ((Excel.Range)xSt.Cells[START_ROW - 1, lc + START_COL]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //垂直居中
                }

                  
//添加行记录          
                for (int i = 0; i <= iRows - 1; i++)
                    
for (int j = 0; j <= iColumns - 1; j++)
                    {
                        
//((Excel.Range)xSt.Cells[i + START_ROW, j + START_COL]).NumberFormat = "#";
                        ((Excel.Range)xSt.Cells[i + START_ROW, j + START_COL]).FormulaR1C1 = dt.Rows[i].ItemArray.GetValue(j);
                        ((Excel.Range)xSt.Cells[i 
+ START_ROW, j + START_COL]).Borders.LineStyle = 1;
                    }
                excelCell 
= xSt.get_Range(excel.Cells[START_ROW, START_COL], excel.Cells[iRows + START_ROW, START_COL + 2]); //get_Range方法为区域选择
                excelCell.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
                excelCell.HorizontalAlignment 
= Excel.XlHAlign.xlHAlignCenter;

                excelCell 
= xSt.get_Range(excel.Cells[11], excel.Cells[iRows, iColumns]);
                excelCell.Columns.AutoFit();

                excel.ScreenUpdating 
= true;
                xBk.SaveAs(fn, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, miss, miss, miss, miss); 
//另存为

                KillSpecialExcel(excel); 
//结束excel进程
                return true;

            }
            
catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
                
return false;
            }





        }
//这个方法从网上找的
Kill Special Excel Process#region Kill Special Excel Process
        [DllImport(
"user32.dll", SetLastError = true)]
        
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

         
        
public void KillSpecialExcel(Excel.Application m_objExcel)
        {
            
try
            {
                
if (m_objExcel != null)
                {
                    
int lpdwProcessId;
                    GetWindowThreadProcessId(
new IntPtr(m_objExcel.Hwnd), out lpdwProcessId);

                    System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();
                }
            }
            
catch (Exception ex)
            {
                Console.WriteLine(
"Delete Excel Process Error:" + ex.Message);
            }
        }
        
#endregion

转载于:https://www.cnblogs.com/goblin/archive/2009/10/17/1585011.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值