• 对Excel的操作


    微软已经封装了对Excel的操作,所以在自己项目先引用Microsoft.Office.Interop.Excel.dll程序集,代码中添加using Microsoft.Office.Interop.Excel;

    Excel类的简单介绍:

    ApplicationClass - 就是我们的excel应用程序。

    Workbook - 就是我们平常见的一个个excel文件,经常是使用Workbooks类对其进行操作。

    Workbook - 就是我们平常见的一个个excel文件,经常是使用Workbooks类对其进行操作。

    Worksheet.Cells[row, column] - 就是某行某列的单元格,注意这里的下标row和column都是从1开始的,跟我平常用的数组或集合的下标有所不同。

    知道了上述基本知识后,利用此类来操作excel就清晰了很多。

    1.打开现有的Excel文件

    Workbook workbook = xlsApp.Workbooks.Open(excelFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.issing, Type.Missing, Type.Missing);  
    Worksheet mySheet = workbook.Sheets[1as Worksheet; //Wookbook默认有一个sheet页
    mySheet.Name = "testsheet";  //这里设定sheet名称

    2.复制sheet页

    复制mySheet成一个新的sheet页,复制完后的名称是mySheet页名称后加一个(2),这里就是testsheet(2),复制完后,Worksheet的数量增加一个

    mySheet.Copy(Type.Missing, workbook.Sheets[1]);

    3.删除sheet页

    xlsApp.DisplayAlerts = false//如果想删除某个sheet页,首先要将此项设为fasle。 
    (xlsApp.ActiveWorkbook.Sheets[1as Worksheet).Delete();

    4.选中sheet页

    (xlsApp.ActiveWorkbook.Sheets[1as Worksheet).Select(Type.Missing);

     5.另存sheet页

    
    
    workbook.Saved = true; workbook.SaveCopyAs(filepath); 

    6.释放Excel资源

    workbook.Close(true, Type.Missing, Type.Missing); 
    workbook = null; xlsApp.Quit(); xlsApp = null;
    GC.Collect();//垃圾回收

     下面贴出我做的小的案例,导出数据到Excel表中:

    前台页面:

     

     后台代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace importExcel
    {
        public partial class 导出数据 : Form
        {
            private string saveAddr = string.Empty;
            public 导出数据()
            {
                InitializeComponent();
            }
    
            private void 导出数据_Load(object sender, EventArgs e)
            {
            }
    
            //执行导出
            private void btnConfirm_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(saveAddr))
                {
                    MessageBox.Show("请选择地址!");
                    return;
                }
    
                DataTable dt = getData(1, 0, 0, 0); ;
                int totalCount = Convert.ToInt32(dt.Rows[0][0].ToString());//获取总数量
                int rowPerPage = 100;//设置一次从表中取出多少数据
    
                int pageCount = Convert.ToInt32(totalCount / rowPerPage);//要取几次
                int yuCount = totalCount % rowPerPage;//最后一次要取的数量
                 
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook book1 = excel.Application.Workbooks.Add(true);
                Microsoft.Office.Interop.Excel.Worksheet sheet1 = null;
                if (!checkBox1.Checked)
                {
                    sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)book1.Sheets[1];
    
                }
    
                int alreadyCount = 0;
                int PageIndex = 1;
                DataTable dt2 = null;
    
                while (PageIndex <= pageCount)
                {
                    try
                    {
                        dt2 = new DataTable();
                        dt2.Clear();
                        dt2 = getData(0, PageIndex, rowPerPage, 0);
                        alreadyCount += dt2.Rows.Count;
    
                        if (checkBox1.Checked)
                        {
                            addSheet(dt2, book1);
                        }
                        else
                        {
                            addToExcel(dt2, sheet1);
                        }
                        progressBar2.Value = 100 * alreadyCount / totalCount;
                    }
                    catch { }
                    finally
                    {
                        PageIndex++;
                    }
                }
    
                DataTable dt3 = getData(2, PageIndex, rowPerPage, yuCount);
                if (!checkBox1.Checked)
                {
                    addToExcel(dt3, sheet1);
                }
                else
                {
                    addSheet(dt3, book1);
                }
    
                alreadyCount += dt3.Rows.Count;
                progressBar2.Value = 100 * alreadyCount / totalCount;
    
                string path = saveAddr;//Excel文件保存的位置
                excel.Visible = false;
                excel.ActiveWorkbook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, null, null, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
                excel.Quit();
                excel = null;
                progressBar1.Value = 100;
                saveAddr = string.Empty;
                GC.Collect();//垃圾回收
                MessageBox.Show("导出数据成功!");
            }
    
            //选择保存地址
            private void btnSelectAddr_Click(object sender, EventArgs e)
            {
                saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*";
                DialogResult dia = saveFileDialog1.ShowDialog();
                if (dia == DialogResult.OK)
                {
                    saveAddr = saveFileDialog1.FileName;
                    textBox1.Text = saveAddr;
                }
            }
    
            //获取数据
            private DataTable getData(int status, int pageNum, int rowsPerPage, int yuCount)
            {
                try
                {
                    DataTable dt = new DataTable();
                    using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conStr"].ConnectionString))
                    {
                        conn.Open();
    
                        SqlCommand cmd = conn.CreateCommand();
                        string sql = string.Format(@"SELECT TOP {0} * FROM Customer WHERE  CustomerID NOT IN 
                                                    (SELECT TOP ({1}*{2}) CustomerID  FROM Customer Order by CustomerID  ) 
                                                    Order by CustomerID   ",
                                                     rowsPerPage, pageNum - 1, rowsPerPage);
                        if (status == 1)
                        {
                            sql = "select  top 1 (select  count(*) from Customer)as TotalCount, * from Customer order by CustomerID ";
                        }
    
                        if (status == 2)
                        {
                            sql = string.Format(@"with aaa as(
                                        select top {0} * from Customer order by CustomerID  desc
                                        ) select * from aaa order by CustomerID ", yuCount);
                        }
                        cmd.CommandText = sql;
    
                        SqlDataAdapter ada = new SqlDataAdapter(cmd);
                        ada.Fill(dt);
                    }
                    return dt;
                }
                catch { GC.Collect(); }
                return null;
            }
    
            //数据添加到Excel,不分sheet
            int rowIndex = 1;
            private bool addToExcel(DataTable dt, Microsoft.Office.Interop.Excel.Worksheet sheet1)
            {
                bool isSuc = false;
                try
                {
                    //添加表头
                    if (rowIndex == 1)
                    {
                        dt.Columns.RemoveAt(0);
                        int columnIndex = 0;
                        foreach (DataColumn col in dt.Columns)
                        {
                            columnIndex++;
                            sheet1.Cells[1, columnIndex] = col.ColumnName;
                        }
                    }
    
                    int colIndex = 0;
                    int itemRowIndex = 0;
                    int totalCount = dt.Rows.Count;
    
                    foreach (DataRow row in dt.Rows)
                    {
                        rowIndex++;
                        itemRowIndex++;
                        progressBar1.Value = 100 * itemRowIndex / totalCount;
    
                        colIndex = 0;
                        foreach (DataColumn col in dt.Columns)
                        {
                            colIndex++;
                            sheet1.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
                        }
                    }
    
                    isSuc = true;
                }
                catch
                {
                    GC.Collect();
                    isSuc = false;
                }
                return isSuc;
            }
    
            //数据添加excel,分sheet
            int sheetIndex = 0;
            void addSheet(DataTable dt, Microsoft.Office.Interop.Excel.Workbook workbook)
            {
                try
                {
                    int colIndex = 0;
                    int itemRowIndex = 0;
                    int totalCount = dt.Rows.Count;
                    sheetIndex++;
    
                    Microsoft.Office.Interop.Excel.Worksheet sheet = null;
                    if (sheetIndex != 1)
                    {
                        sheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                        sheet.Name = string.Format("第{0}页", sheetIndex);
                    }
                    else
                    {
                        //wookbook默认有一个sheet
                        sheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];
                        sheet.Name = "第1页";
                    }
    
                    //添加表头
                    int columnIndex = 0;
                    foreach (DataColumn col in dt.Columns)
                    {
                        columnIndex++;
                        sheet.Cells[1, columnIndex] = col.ColumnName;
                    }
    
                    foreach (DataRow row in dt.Rows)
                    {
                        itemRowIndex++;
                        progressBar1.Value = 100 * itemRowIndex / totalCount;
    
                        colIndex = 0;
                        foreach (DataColumn col in dt.Columns)
                        {
                            colIndex++;
                            sheet.Cells[itemRowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
                        }
                    }
                }
                catch
                {
                    GC.Collect();
                }
            }
    
            //内存回收
            private void 导出数据_FormClosed(object sender, FormClosedEventArgs e)
            {
                GC.Collect();//垃圾回收
                GC.Collect();//垃圾回收
            }
    
    
    
        }
    }
  • 相关阅读:
    promise异步获取数据
    解决浏览器保存密码自动填充问题
    函数柯里化
    JS高级函数的用法
    Object.assign替代写法
    tree-shaking
    假如参数是对象或者函数,如何处理
    宏任务与微任务 event-loop
    Linux常用命令大全
    Image Processing
  • 原文地址:https://www.cnblogs.com/wangchengshen/p/3685171.html
Copyright © 2020-2023  润新知