使用EPPLUS操作EXcel


1 下載Epplus最新版:http://epplus.codeplex.com/

2 在項目中添加引用 EEPULS.dll(測試環境Win7+V2010旗艦)

3  添加using引用

  using OfficeOpenXml;
  using OfficeOpenXml.Drawing;
  using OfficeOpenXml.Drawing.Chart;
  using OfficeOpenXml.Style;

4 read Excel文件

    readExcel文件到Datatable

復制代碼
        private void button2_Click(object sender, EventArgs e)
        {
            string pfilePath = "";
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "*.xls|*.xlsx";
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                pfilePath = ofd.FileName;
            }
            if (string.IsNullOrEmpty(pfilePath))
            {
                MessageBox.Show("沒有選中文件");
                return;
            }

            FileInfo existingFile = new FileInfo(pfilePath);
            try
            {
                ExcelPackage package = new ExcelPackage(existingFile);
                int vSheetCount = package.Workbook.Worksheets.Count; //獲取總Sheet頁

                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];//選定 指定頁

                int maxColumnNum = worksheet.Dimension.End.Column;//最大列
                int minColumnNum = worksheet.Dimension.Start.Column;//最小列

                int maxRowNum = worksheet.Dimension.End.Row;//最小行
                int minRowNum = worksheet.Dimension.Start.Row;//最大行

                DataTable vTable = new DataTable();
                DataColumn vC;
                for (int j = 1; j <= maxColumnNum; j++)
                {
                    vC = new DataColumn("A_" + j, typeof(string));
                    vTable.Columns.Add(vC);
                }
                if (maxRowNum > 200)
                {
                    maxRowNum = 200;
                }
                for (int n = 1; n <= maxRowNum; n++)
                {
                    DataRow vRow = vTable.NewRow();
                    for (int m = 1; m <= maxColumnNum; m++)
                    {
                        vRow[m - 1] = worksheet.Cells[n, m].Value;
                    }
                    vTable.Rows.Add(vRow);
                }
                this.dataGridView1.DataSource = vTable;
            }
            catch (Exception vErr)
            {
                MessageBox.Show(vErr.Message);
            }
        }
復制代碼

5 write Excel文件

5.1 直接生成EXcel示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private  void  button1_Click( object  sender, EventArgs e)
{
          
     OfficeOpenXml.ExcelPackage ep =  new  OfficeOpenXml.ExcelPackage();
     OfficeOpenXml.ExcelWorkbook wb = ep.Workbook;
     OfficeOpenXml.ExcelWorksheet ws = wb.Worksheets.Add( "我的工作表" );
     //配置文件屬性 
     wb.Properties.Category =  "類別" ;
     wb.Properties.Author =  "作者" ;
     wb.Properties.Comments =  "備注" ;
     wb.Properties.Company =  "公司" ;
     wb.Properties.Keywords =  "關鍵字" ;
     wb.Properties.Manager =  "管理者" ;
     wb.Properties.Status =  "內容狀態" ;
     wb.Properties.Subject =  "主題" ;
     wb.Properties.Title =  "標題" ;
     wb.Properties.LastModifiedBy =  "最后一次保存者" ;
     //寫數據 
     ws.Cells[1, 1].Value =  "Hello" ;
 
     ws.Column(1).Width=40; //修改列寬 
     ws.Cells[ "B1" ].Value =  "World" ;
     ws.Cells[3, 3, 3, 5].Merge =  true ;
     ws.Cells[3, 3].Value =  "Cells[3, 3, 3, 5]合並" ;
     ws.Cells[ "A4:D5" ].Merge =  true ;
     ws.Cells[ "A4" ].Value =  "Cells[\"A4:D5\"]合並" ;
 
     SaveFileDialog sfd =  new  SaveFileDialog();
     sfd.Filter =  "*.xls|*.xlsx" ;
     if  (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
         FileInfo file =  new  FileInfo(sfd.FileName);
         ep.File = file;
         ep.Save();
         MessageBox.Show( "保存成功" );
     }
     else
     {
         MessageBox.Show( "取消保存" );
     }
}

5.2 從DataGridView導出至Excel

      將DataGridView顯示內容導出至Excel(DataTable只需小改動即可)

     

復制代碼
            OfficeOpenXml.ExcelPackage ep = new OfficeOpenXml.ExcelPackage();
            OfficeOpenXml.ExcelWorkbook wb = ep.Workbook;
            OfficeOpenXml.ExcelWorksheet ws = wb.Worksheets.Add("我的工作表");
            //配置文件屬性,可以不注釋掉  
            //wb.Properties.Category = "類別";
            //wb.Properties.Author = "作者";
            //wb.Properties.Comments = "備注";
            //wb.Properties.Company = "公司";
            //wb.Properties.Keywords = "關鍵字";
            //wb.Properties.Manager = "管理者";
            //wb.Properties.Status = "內容狀態";
            //wb.Properties.Subject = "主題";
            //wb.Properties.Title = "標題";
            //wb.Properties.LastModifiedBy = "最后一次保存者";

            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                for (int j = 1; j < dataGridView1.Columns.Count; j++)
                {
                    if (dataGridView1.Columns[j-1].Visible == true)
                    {
                        if (dataGridView1.Rows[i].Cells[j-1].Value == null)
                        {
                            ws.Cells[i+1, j].Value = " ";
                        }
                        else
                        {
                            string rowstr = dataGridView1.Rows[i].Cells[j-1].Value.ToString();
                            if (rowstr.IndexOf("\r\n") > 0)
                                rowstr = rowstr.Replace("\r\n", " ");
                            if (rowstr.IndexOf("\t") > 0)
                                rowstr = rowstr.Replace("\t", " ");
                            ws.Cells[i+1, j].Value = rowstr;
                        }
                    }
                }
            } 

            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "*.xls|*.xlsx";
            if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                FileInfo file = new FileInfo(sfd.FileName);
                ep.File = file;
                ep.Save();
                MessageBox.Show("保存成功");
            }
            else
            {
                MessageBox.Show("取消保存");
            }
復制代碼

 

/// <summary>
        /// 讀取sheet 內的數據進入實體
        /// </summary>
        /// <param name="worksheet"></param>
        /// <returns></returns>
        public List<Person> GetSheetValues(string filepath)
        {
            FileInfo file = new FileInfo(filepath);
            if (file != null)
            {
                using (ExcelPackage package = new ExcelPackage(file))
                {

                    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
                    //獲取表格的列數和行數
                    int rowCount = worksheet.Dimension.Rows;
                    int ColCount = worksheet.Dimension.Columns;
                    var persons = new List<Person>();
                    for (int row = 1; row <= rowCount; row++)
                    {
                        Person person = new Person();
                        person.Name = worksheet.Cells[row, 1].Value.ToString();
                        person.Sex = worksheet.Cells[row, 2].Value.ToString();
                        persons.Add(person);
                    }
                    return persons;
                }
            }
             return null;
        }

 

 

上述代碼大部分來源網絡,只進行過小改動,下面是原文和資料地址:

      http://blog.csdn.net/jimmy2248/article/details/8363697

      http://blog.csdn.net/zhoufoxcn/article/details/14112473

      http://www.cnblogs.com/liudeyun/p/3535740.html

      http://blog.163.com/china__xuhua/blog/static/19972316920136335721285/

      http://www.cnblogs.com/xiaotan68/archive/2008/03/20/1114796.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM