1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
//using Excel = Microsoft.Office.Interop.Excel;
5
using Excel;
6
using System.Windows.Forms;
7
8
9
namespace ExcelReport
10
{
11
class InsertPicToExcel
12
{
13
/// <summary>
14
/// 打开没有模板的操作。
15
/// </summary>
16
public void Open()
17
{
18
this.Open(String.Empty);
19
}
20
21
/// <summary>
22
/// 功能:实现Excel应用程序的打开
23
/// </summary>
24
/// <param name="TemplateFilePath">模板文件物理路径</param>
25
public void Open(string TemplateFilePath)
26
{
27
//打开对象
28
m_objExcel = new Excel.Application();
29
m_objExcel.Visible = false;
30
m_objExcel.DisplayAlerts = false;
31
32
if (m_objExcel.Version != "11.0")
33
{
34
MessageBox.Show("您的 Excel 版本不是 11.0 (Office 2003),操作可能会出现问题。");
35
m_objExcel.Quit();
36
return;
37
}
38
39
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
40
if (TemplateFilePath.Equals(String.Empty))
41
{
42
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
43
}
44
else
45
{
46
m_objBook = m_objBooks.Open(TemplateFilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt,
47
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
48
}
49
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
50
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
51
m_objExcel.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose);
52
}
53
54
private void m_objExcel_WorkbookBeforeClose(Excel.Workbook m_objBooks, ref bool _Cancel)
55
{
56
MessageBox.Show("保存完毕!");
57
}
58
59
/// <summary>
60
/// 将图片插入到指定的单元格位置。
61
/// 注意:图片必须是绝对物理路径
62
/// </summary>
63
/// <param name="RangeName">单元格名称,例如:B4</param>
64
/// <param name="PicturePath">要插入图片的绝对路径。</param>
65
public void InsertPicture(string RangeName, string PicturePath)
66
{
67
m_objRange = m_objSheet.get_Range(RangeName, m_objOpt);
68
m_objRange.Select();
69
Excel.Pictures pics = (Excel.Pictures)m_objSheet.Pictures(m_objOpt);
70
pics.Insert(PicturePath, m_objOpt);
71
}
72
73
/// <summary>
74
/// 将图片插入到指定的单元格位置,并设置图片的宽度和高度。
75
/// 注意:图片必须是绝对物理路径
76
/// </summary>
77
/// <param name="RangeName">单元格名称,例如:B4</param>
78
/// <param name="PicturePath">要插入图片的绝对路径。</param>
79
/// <param name="PictuteWidth">插入后,图片在Excel中显示的宽度。</param>
80
/// <param name="PictureHeight">插入后,图片在Excel中显示的高度。</param>
81
public void InsertPicture(string RangeName, string PicturePath, float PictuteWidth, float PictureHeight)
82
{
83
m_objRange = m_objSheet.get_Range(RangeName, m_objOpt);
84
m_objRange.Select();
85
float PicLeft, PicTop;
86
PicLeft = Convert.ToSingle(m_objRange.Left);
87
PicTop = Convert.ToSingle(m_objRange.Top);
88
//参数含义:
89
//图片路径
90
//是否链接到文件
91
//图片插入时是否随文档一起保存
92
//图片在文档中的坐标位置(单位:points)
93
//图片显示的宽度和高度(单位:points)
94
//参数详细信息参见:http://msdn2.microsoft.com/zh-cn/library/aa221765(office.11).aspx
95
m_objSheet.Shapes.AddPicture(PicturePath,Microsoft.Office.Core.MsoTriState.msoFalse,
96
Microsoft.Office.Core.MsoTriState.msoTrue, PicLeft, PicTop, PictuteWidth, PictureHeight);
97
}
98
99
/// <summary>
100
/// 将Excel文件保存到指定的目录,目录必须事先存在,文件名称不一定要存在。
101
/// </summary>
102
/// <param name="OutputFilePath">要保存成的文件的全路径。</param>
103
public void SaveFile(string OutputFilePath)
104
{
105
m_objBook.SaveAs(OutputFilePath, m_objOpt, m_objOpt,
106
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
107
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
108
109
this.Close();
110
}
111
/// <summary>
112
/// 关闭应用程序
113
/// </summary>
114
private void Close()
115
{
116
m_objBook.Close(false, m_objOpt, m_objOpt);
117
m_objExcel.Quit();
118
}
119
120
/// <summary>
121
/// 释放所引用的COM对象。注意:这个过程一定要执行。
122
/// </summary>
123
public void Dispose()
124
{
125
ReleaseObj(m_objSheets);
126
ReleaseObj(m_objBook);
127
ReleaseObj(m_objBooks);
128
ReleaseObj(m_objExcel);
129
System.GC.Collect();
130
System.GC.WaitForPendingFinalizers();
131
}
132
/// <summary>
133
/// 释放对象,内部调用
134
/// </summary>
135
/// <param name="o"></param>
136
private void ReleaseObj(object o)
137
{
138
try
139
{
140
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
141
}
142
catch { }
143
finally { o = null; }
144
}
145
146
private Excel.Application m_objExcel = null;
147
private Excel.Workbooks m_objBooks = null;
148
private Excel._Workbook m_objBook = null;
149
private Excel.Sheets m_objSheets = null;
150
private Excel._Worksheet m_objSheet = null;
151
private Excel.Range m_objRange = null;
152
private object m_objOpt = System.Reflection.Missing.Value;
153
}
154
155
}
156

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

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

二、调用
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
namespace ExcelReport
10
{
11
public partial class Form1 : Form
12
{
13
public Form1()
14
{
15
InitializeComponent();
16
}
17
18
private void Form1_Load(object sender, EventArgs e)
19
{
20
InsertPicToExcel ipt = new InsertPicToExcel();
21
ipt.Open();
22
ipt.InsertPicture("B2", @"C:\Excellogo.gif");
23
ipt.InsertPicture("B18", @"C:\Excellogo.gif", 120, 80);
24
ipt.SaveFile(@"C:\ExcelTest.xls");
25
ipt.Dispose();
26
}
27
28
}
29
}

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
