C#winform从数据集导出Excel(带指定Excel样式)

本文介绍了一种使用 C# 和 Microsoft Office Interop Excel 库实现的数据导出方法,通过示例代码展示了如何从数据库中读取数据并将其写入 Excel 文件的过程。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;

using System.Reflection; //命名空间包含提供加载类型、方法和字段的有组织的视图的类和接口,具有动态创建和调用类型的功能
using System.Diagnostics; // 命名空间提供特定的类,使您能够与系统进程、事件日志和性能计数器进行交互

namespace UpdateClient
{
    public partial class frmExcel : Form
    {
        private DataSet ds;

        private Microsoft.Office.Interop.Excel.Application myExcel = null;
        public frmExcel()
        {
            InitializeComponent();            
        }

        private void FillDataset()
        {
            ds = new DataSet();
            SqlConnection cnn = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;password=");
            SqlDataAdapter da = new SqlDataAdapter("select * from Products", cnn);
            da.Fill(ds);
        }

        private List<Process> GetExcelProcesses()
        {
            Process[] processes = Process.GetProcesses();
            List<Process> ListProcess = new List<Process>();

            foreach (Process _pr in processes)
            {
                if (_pr.ProcessName.ToUpper().Equals("EXCEL"))
                {
                    ListProcess.Add(_pr);
                }
            }
            return ListProcess;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            List<Process> excelProcesses = GetExcelProcesses();
            if (excelProcesses.Count > 0)
            {
                MessageBox.Show("请将其他的Excel关闭再进行导出!");
                KillTheExcel();
                return;
            }

            if (myExcel == null)
                myExcel = new Microsoft.Office.Interop.Excel.Application();

            ExprotExcel2();
        }

        private void ExprotExcel2()
        {
            //SaveFileDialog sfd = new SaveFileDialog();
            //sfd.Filter = "EXCEL文档(*.xls)|*.xls|所有文档(*.*)|*.*";
            //if (sfd.ShowDialog() != DialogResult.OK)
            //    return;
            //string savePatrh = sfd.FileName;

            this.Cursor = Cursors.WaitCursor;
            FillDataset();

            //命名空间包含定义区域性相关信息的类,这些信息包括语言、国家/地区、使用的日历、日期、货币和数字的格式模式以及字符串的排序顺序。
            //我们可以使用这些类编写全球化(国际化)应用程序。
            //而像 StringInfo 和 TextInfo 这样的类更是为我们提供了诸如代理项支持和文本元素处理等高级全球化功能。
            System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;  //备份文化环境
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); //设置文化环境

            //Workbook workbookData = myExcel.Workbooks.Add(Missing.Value);
            Workbook workbookData = myExcel.Application.Workbooks.Add(true);

            Worksheet xlSheet = (Worksheet)workbookData.Worksheets[1];

            "内容"

            try
            {
                //myExcel.Save(@"C:a.xls"); \\此方法有问题
                workbookData.Saved = true;
                workbookData.SaveCopyAs(@"E:\a111.xls");
                myExcel.Quit();
                //myExcel.Visible = true;
                MessageBox.Show("导出成功!", "恭喜", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbookData);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
                GC.Collect();
                range = null;
                xlSheet = null;
                workbookData = null;
                myExcel = null;
                this.Cursor = Cursors.Default;
                //KillTheExcel();
            }
        }
        private void KillTheExcel()
        {
            List<Process> listProcess = GetExcelProcesses();
            foreach (Process _pr in listProcess)
            {
                _pr.Kill();
            }
        }
        private void frmExcel_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string[,] myData =  
            {
              {"车牌号","类型","品 牌","型 号","颜 色","附加费证号","车架号"},
              {"浙KA3676","危险品","货车","铁风SZG9220YY","白","1110708900","022836"},
              {"浙KA4109","危险品","货车","解放CA4110P1K2","白","223132","010898"},
              {"浙KA0001A","危险品","货车","南明LSY9190WS","白","1110205458","0474636"},
              {"浙KA0493","上普货","货车","解放LSY9190WS","白","1110255971","0094327"},
              {"浙KA1045","普货","货车","解放LSY9171WCD","蓝","1110391226","0516003"},
              {"浙KA1313","普货","货车","解放9190WCD","蓝","1110315027","0538701"},
              {"浙KA1322","普货","货车","解放LSY9190WS","蓝","24323332","0538716"},
              {"浙KA1575","普货","货车","解放LSY9181WCD","蓝","1110314149","0113018"},
              {"浙KA1925","普货","货车","解放LSY9220WCD","蓝","1110390626","00268729"},
              {"浙KA2258","普货","货车","解放LSY9220WSP","蓝","111048152","00320"}
            };

            //创建一个Excel文件
            Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();
            myExcel.Application.Workbooks.Add(true);

            //让Excel文件可见
            myExcel.Visible = true;

            //第一行为报表名称
            myExcel.Cells[1, 4] = "普通报表";

            //逐行写入数据,
            for (int i = 0; i < 11; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    //以单引号开头,表示该单元格为纯文本
                    myExcel.Cells[2 + i, 1 + j] = "'" + myData[i, j];
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值