博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 导出Excel的示例
阅读量:5092 次
发布时间:2019-06-13

本文共 11262 字,大约阅读时间需要 37 分钟。

 

概要:

    excel导出在C#代码中应用己经很广泛了,我这里就做些总结,供自己和读者学习用。

Excel知识点。 

一、添加引用和命名空间   

添加Microsoft.Office.Interop.Excel引用,它的默认路径是C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Excel.dll    代码中添加引用using Microsoft.Office.Interop.Excel;   

下载Microsoft.Office.Interop.Excel.dll

二、Excel类的简单介绍    此命名空间下关于Excel类的结构分别为:    ApplicationClass - 就是我们的excel应用程序。    Workbook - 就是我们平常见的一个个excel文件,经常是使用Workbooks类对其进行操作。    Worksheet - 就是excel文件中的一个个sheet页。    Worksheet.Cells[row, column] - 就是某行某列的单元格,注意这里的下标row和column都是从1开始的,跟我平常用的数组或集合的下标有所不同。    知道了上述基本知识后,利用此类来操作excel就清晰了很多。   

三、Excel的操作    任何操作Excel的动作首先肯定是用excel应用程序,首先要new一个ApplicationClass 实例,并在最后将此实例释放。   

1
2
3
4
5
ApplicationClass xlsApp =
new
ApplicationClass();
// 1. 创建Excel应用程序对象的一个实例,相当于我们从开始菜单打开Excel应用程序。
if
(xlsApp ==
null
)
{
//对此实例进行验证,如果为null则表示运行此代码的机器可能未安装Excel
}

 

1. 打开现有的Excel文件 

1
2
3
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.Missing, Type.Missing, Type.Missing);
Worksheet mySheet = workbook.Sheets[1]
as
Worksheet;
//第一个sheet页
mySheet.Name =
"testsheet"
;
//这里修改sheet名称

2.复制sheet页 

1
mySheet.Copy(Type.Missing, workbook.Sheets[1]);
//复制mySheet成一个新的sheet页,复制完后的名称是mySheet页名称后加一个(2),这里就是testsheet(2),复制完后,Worksheet的数量增加一个

注意 这里Copy方法的两个参数,指是的复制出来新的sheet页是在指定sheet页的前面还是后面,上面的例子就是指复制的sheet页在第一个sheet页的后面。  3.删除sheet页 

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

4.选中sheet页 

1
(xlsApp.ActiveWorkbook.Sheets[1]
as
Worksheet).Select(Type.Missing);
//选中某个sheet页

5.另存excel文件 

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

6.释放excel资源 

1
2
3
4
workbook.Close(
true
, Type.Missing, Type.Missing);
workbook =
null
;
xlsApp.Quit();
xlsApp =
null
;

 

 

一般的我们传入一个DataTable生成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
/// <summary>
///
/// </summary>
/// <param name="dt"></param>
protected
void
ExportExcel(DataTable dt)
{
   
if
(dt ==
null
||dt.Rows.Count==0)
return
;
   
Microsoft.Office.Interop.Excel.Application xlApp =
new
Microsoft.Office.Interop.Excel.Application();
 
   
if
(xlApp ==
null
)
   
{
       
return
;
   
}
   
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
   
System.Threading.Thread.CurrentThread.CurrentCulture =
new
System.Globalization.CultureInfo(
"en-US"
);
   
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];
   
Microsoft.Office.Interop.Excel.Range range;
   
long
totalCount = dt.Rows.Count;
   
long
rowRead = 0;
   
float
percent = 0;
   
for
(
int
i = 0; i < dt.Columns.Count; i++)
   
{
       
worksheet.Cells[1, i + 1] = dt.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 < dt.Rows.Count; r++)
   
{
       
for
(
int
i = 0; i < dt.Columns.Count; i++)
       
{
           
worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString();
       
}
       
rowRead++;
       
percent = ((
float
)(100 * rowRead)) / totalCount;
   
}
   
xlApp.Visible =
true
;
}

 

 

如果要在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
42
43
44
45
protected
void
ExportExcel(DataTable dt)
{
   
if
(dt ==
null
|| dt.Rows.Count == 0)
return
;
   
Microsoft.Office.Interop.Excel.Application xlApp =
new
Microsoft.Office.Interop.Excel.Application();
 
   
if
(xlApp ==
null
)
   
{
       
return
;
   
}
   
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
   
System.Threading.Thread.CurrentThread.CurrentCulture =
new
System.Globalization.CultureInfo(
"en-US"
);
   
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];
   
Microsoft.Office.Interop.Excel.Range range;
   
long
totalCount = dt.Rows.Count;
   
long
rowRead = 0;
   
float
percent = 0;
   
for
(
int
i = 0; i < dt.Columns.Count; i++)
   
{
       
worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
       
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
       
range.Interior.ColorIndex = 15;
   
}
   
for
(
int
r = 0; r < dt.Rows.Count; r++)
   
{
       
for
(
int
i = 0; i < dt.Columns.Count; i++)
       
{
           
try
           
{
               
worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString();
           
}
           
catch
           
{
               
worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString().Replace(
"="
,
""
);
           
}
       
}
       
rowRead++;
       
percent = ((
float
)(100 * rowRead)) / totalCount;
   
}
   
   
worksheet.Shapes.AddPicture(
"C:\\Users\\spring\\Desktop\\1.gif"
, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 100, 200, 200, 300);
   
worksheet.Shapes.AddTextEffect(Microsoft.Office.Core.MsoPresetTextEffect.msoTextEffect1,
"123456"
,
"Red"
, 15, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 150, 200);
   
xlApp.Visible =
true
;
}

 

 

我们调用如下:

1
2
3
4
5
6
7
8
9
10
11
12
public
void
GenerateExcel()
{
   
DataTable dt =
new
DataTable();
   
dt.Columns.Add(
"Name"
,
typeof
(
string
));
   
dt.Columns.Add(
"Age"
,
typeof
(
string
));
   
DataRow dr = dt.NewRow();
   
dr[
"Name"
] =
"spring"
;
   
dr[
"Age"
] =
"20"
;
   
dt.Rows.Add(dr);
   
dt.AcceptChanges();
   
ExportExcel(dt);
}

 

 

运行结果如下所示:

其中如下代码的作用是

1
worksheet.Shapes.AddPicture(
"C:\\Users\\spring\\Desktop\\1.gif"
, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 100, 200, 200, 300);

在Excel的指定位置加入图片

1
worksheet.Shapes.AddTextEffect(Microsoft.Office.Core.MsoPresetTextEffect.msoTextEffect1,
"123456"
,
"Red"
, 15, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 150, 200);

 

在Excel的指定位置加入文本框,和里面的内容.

 

我们可以这样来设计一个ExcelBase的基类:

先创建一个ExcelBE.cs:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
public
class
ExcelBE
{
    
private
int
_row = 0;
    
private
int
_col = 0;
    
private
string
_text =
string
.Empty;
    
private
string
_startCell =
string
.Empty;
    
private
string
_endCell =
string
.Empty;
    
private
string
_interiorColor =
string
.Empty;
    
private
bool
_isMerge =
false
;
    
private
int
_size = 0;
    
private
string
_fontColor =
string
.Empty;
    
private
string
_format =
string
.Empty;
 
    
public
ExcelBE(
int
row,
int
col,
string
text,
string
startCell,
string
endCell,
string
interiorColor,
bool
isMerge,
int
size,
string
fontColor,
string
format)
    
{
        
_row = row;
        
_col = col;
        
_text = text;
        
_startCell = startCell;
        
_endCell = endCell;
        
_interiorColor = interiorColor;
        
_isMerge = isMerge;
        
_size = size;
        
_fontColor = fontColor;
        
_format = format;
    
}
 
    
public
ExcelBE()
    
{ }
 
    
public
int
Row
    
{
        
get
{
return
_row; }
        
set
{ _row = value; }
    
}
 
    
public
int
Col
    
{
        
get
{
return
_col; }
        
set
{ _col = value; }
    
}
 
    
public
string
Text
    
{
        
get
{
return
_text; }
        
set
{ _text = value; }
    
}
 
    
public
string
StartCell
    
{
        
get
{
return
_startCell; }
        
set
{ _startCell = value; }
    
}
 
    
public
string
EndCell
    
{
        
get
{
return
_endCell; }
        
set
{ _endCell = value; }
    
}
 
    
public
string
InteriorColor
    
{
        
get
{
return
_interiorColor; }
        
set
{ _interiorColor = value; }
    
}
 
    
public
bool
IsMerge
    
{
        
get
{
return
_isMerge; }
        
set
{ _isMerge = value; }
    
}
 
    
public
int
Size
    
{
        
get
{
return
_size; }
        
set
{ _size = value; }
    
}
 
    
public
string
FontColor
    
{
        
get
{
return
_fontColor; }
        
set
{ _fontColor = value; }
    
}
 
    
public
string
Formart
    
{
        
get
{
return
_format; }
        
set
{ _format = value; }
    
}
 
}

 

 

接下来创建ExcelBase.cs:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public
class
ExcelBase
{
   
private
Microsoft.Office.Interop.Excel.Application app =
null
;
   
private
Microsoft.Office.Interop.Excel.Workbook workbook =
null
;
   
private
Microsoft.Office.Interop.Excel.Worksheet worksheet =
null
;
   
private
Microsoft.Office.Interop.Excel.Range workSheet_range =
null
;
 
   
public
ExcelBase()
   
{
       
createDoc();
   
}
 
   
public
void
createDoc()
   
{
       
try
       
{
           
app =
new
Microsoft.Office.Interop.Excel.Application();
           
app.Visible =
true
;
           
workbook = app.Workbooks.Add(1);
           
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];
       
}
       
catch
(Exception e)
       
{
           
Console.Write(
"Error"
);
       
}
       
finally
       
{
       
}
   
}
 
   
public
void
InsertData(ExcelBE be)
   
{
       
worksheet.Cells[be.Row, be.Col] = be.Text;
       
workSheet_range = worksheet.get_Range(be.StartCell, be.EndCell);
       
workSheet_range.MergeCells = be.IsMerge;
       
workSheet_range.Interior.Color = GetColorValue(be.InteriorColor);
       
workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();
       
workSheet_range.ColumnWidth = be.Size;
       
workSheet_range.Font.Color =
string
.IsNullOrEmpty(be.FontColor) ? System.Drawing.Color.White.ToArgb() : System.Drawing.Color.Black.ToArgb();
       
workSheet_range.NumberFormat = be.Formart;
   
}
 
   
private
int
GetColorValue(
string
interiorColor)
   
{
       
switch
(interiorColor)
       
{
           
case
"YELLOW"
:
               
return
System.Drawing.Color.Yellow.ToArgb();
           
case
"GRAY"
:
               
return
System.Drawing.Color.Gray.ToArgb();
           
case
"GAINSBORO"
:
               
return
System.Drawing.Color.Gainsboro.ToArgb();
           
case
"Turquoise"
:
               
return
System.Drawing.Color.Turquoise.ToArgb();
           
case
"PeachPuff"
:
               
return
System.Drawing.Color.PeachPuff.ToArgb();
 
           
default
:
               
return
System.Drawing.Color.White.ToArgb();
       
}
   
}
}

 

 

调用的代码如下:

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
private
void
btnRun_Click(
object
sender, EventArgs e)
{
   
ExcelBase excel =
new
ExcelBase();
   
//creates the main header
   
ExcelBE be =
null
;
   
be =
new
ExcelBE (5, 2,
"Total of Products"
,
"B5"
,
"D5"
,
"YELLOW"
,
true
, 10,
"n"
,
null
);
   
excel.InsertData(be);
   
//creates subheaders
   
be =
new
ExcelBE (6, 2,
"Sold Product"
,
"B6"
,
"B6"
,
"GRAY"
,
true
, 10,
""
,
null
);
   
excel.InsertData(be);
   
be=
new
ExcelBE(6, 3,
""
,
"C6"
,
"C6"
,
"GRAY"
,
true
, 10,
""
,
null
);
   
excel.InsertData(be);
   
be=
new
ExcelBE (6, 4,
"Initial Total"
,
"D6"
,
"D6"
,
"GRAY"
,
true
, 10,
""
,
null
);
   
excel.InsertData(be);
   
//add Data to cells
   
be=
new
ExcelBE (7, 2,
"114287"
,
"B7"
,
"B7"
,
null
,
false
,10,
""
,
"#,##0"
);
   
excel.InsertData(be);
   
be=
new
ExcelBE (7, 3,
""
,
"C7"
,
"C7"
,
null
,
false
,10,
""
,
null
);
   
excel.InsertData(be);
   
be =
new
ExcelBE(7, 4,
"129121"
,
"D7"
,
"D7"
,
null
,
false
, 10,
""
,
"#,##0"
);
   
excel.InsertData(be);
   
//add percentage row
   
be =
new
ExcelBE(8, 2,
""
,
"B8"
,
"B8"
,
null
,
false
, 10,
""
,
""
);
   
excel.InsertData(be);
   
be =
new
ExcelBE(8, 3,
"=B7/D7"
,
"C8"
,
"C8"
,
null
,
false
, 10,
""
,
"0.0%"
);
   
excel.InsertData(be);
   
be =
new
ExcelBE(8, 4,
""
,
"D8"
,
"D8"
,
null
,
false
, 10,
""
,
""
);
   
excel.InsertData(be);
   
//add empty divider
   
be =
new
ExcelBE(9, 2,
""
,
"B9"
,
"D9"
,
"GAINSBORO"
,
true
, 10,
""
,
null
);
   
excel.InsertData(be);  
 
}

 

 

结果如下图所示:

出处:

转载于:https://www.cnblogs.com/bdf216/archive/2012/11/26/2788570.html

你可能感兴趣的文章
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>
MVC+Servlet+mysql+jsp读取数据库信息
查看>>
黑马程序员——2 注释
查看>>
用OGRE1.74搭建游戏框架(三)--加入人物控制和场景
查看>>
转化课-计算机基础及上网过程
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
互联网模式下我们更加应该“专注”
查看>>
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Win 10 文件浏览器无法打开
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>
Java跟Javac,package与import
查看>>
day-12 python实现简单线性回归和多元线性回归算法
查看>>