zoukankan      html  css  js  c++  java
  • 使用DateSet下载Excel

    这里我们使用Microsoft.Office.Interop.Excel.dll下载Excel,没有引用可点击下载

    关键代码,ExcelHelper类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.IO;
    
    namespace ExcelDownLoad
    {
        public delegate void ExcelEventHandler();
    
        public class ExcelHelper:ISubject
        {
            string processStr = "";
            //public Label label2;
    
            public string ProcessStr
            {
                get { return processStr; }
                set { processStr = value; }
            }
    
            #region Kill Special Excel Process
    
            [DllImport("user32.dll", SetLastError = true)]
            static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
    
    
            public void KillSpecialExcel(Microsoft.Office.Interop.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
    
            public void ExportExcel(DataSet ds, string saveFileName)
            {
                if (ds == null) return;
                
                bool fileSaved = false;
    
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消         
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null)
                {
                    MessageBox.Show("无法创建Excel对象,您的电脑未安装Excel"); return;
                }
                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];
                //取得sheet1      
                Microsoft.Office.Interop.Excel.Range range; 
                string oldCaption = DateTime.Today.ToString("yy-MM-dd");
                long totalCount = ds.Tables[0].Rows.Count; 
                long rowRead = 0; 
                float percent = 0;
                //worksheet.Cells[1, 1] = DateTime.Today.ToString("yy-MM-dd");
                //写入字段      
                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                {
                    worksheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
                    range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
                    range.Interior.ColorIndex = 15;
                    range.Font.Bold = true;
                }
                //写入数值        
                for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
                {
                    for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                    {
                        worksheet.Cells[r + 2, i + 1] = ds.Tables[0].Rows[r][i];
                    }
                    rowRead++;
                    percent = ((float)(100 * rowRead)) / totalCount;
                    //if (label2 != null)
                    //{
                    //    label2.Text = "正在导出数据[" + percent.ToString("0.00") + "%]..."; //这里可以自己做一个label用来显示进度.  
                    //}
                    System.Windows.Forms.Application.DoEvents();
                }
                ////this.lbl_process.Visible = false;
                range = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[ds.Tables[0].Rows.Count + 1, ds.Tables[0].Columns.Count]);
                range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
                range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
                range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
                if (ds.Tables[0].Columns.Count > 1)
                {
                    range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
                    range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                    range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
                }
                if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(saveFileName);
    
                        fileSaved = true;
                    }
                    catch (Exception ex)
                    {
                        fileSaved = false; MessageBox.Show("导出文件时出错,文件可能正被打开!
    " + ex.Message);
                    }
                }
                else
                {
                    fileSaved = false;
                } 
                xlApp.Quit();
                GC.Collect();//强行销毁          
                if (fileSaved && File.Exists(saveFileName))
                {
                    //System.Diagnostics.Process.Start(saveFileName);             
                    MessageBox.Show("导出成功!", "通知");
                }
            }
    
            #region ISubject Members
          
            public event ExcelEventHandler Update;
            public void Notify()
            {
                if (Update != null)
                {
                    // 使用事件来通知给订阅者
                    Update();
                }
            }
    
            #endregion
        }
    }
  • 相关阅读:
    hadoop ha模式下,kill active的namenode节点后,standby的namenode节点没能自动启动
    Hadoop2.6.5单机安装
    hadoop HA集群搭建
    hadoop搭建HA集群之后不能自动切换namenode
    hadoop集群之HDFS和YARN启动和停止命令
    查看CentOS7 监听端口命令
    JournalNode的作用
    Secondary NameNode:它究竟有什么作用?
    CentOS7查看和关闭防火墙
    关于Hosts与network的异同之处
  • 原文地址:https://www.cnblogs.com/mybky/p/3777315.html
Copyright © 2011-2022 走看看