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