Excel导出方法总结篇
有时候会时不时碰到这个问题
。
虽然已经交过作业了,但每次温习居然都有新的感受和发现。
于是,再写一篇总结(也不知道是不是以后还会再写总结?
),与大家分享一些所得。
我这里简单复习一下有哪几种可以导出Excel的方法:
1。把excel作为数据库,导入数据。
这里分成两种:
一种是把excel作为connection,通过insert数据加入;
另一种,则是利用COM对象,调用Excel的QueryTables的方法。
2。直接引用COM组件,直接通过接口调用,并生成相应的Excel文件。
这种方法对于性能要求要高一些。
对B/S结构的程序,基本不考虑这种方法。
对于无法关闭Excel进程的问题,今天看到一篇《立即释放.net下的com组件》
http://jjstar.cnblogs.com/archive/2004/11/08/61316.html
我要试试看
3。利用生成HTML代码,保存为Excel文件
这个方法经常在B/S使用。
前三种方法的使用可以参考
Powerlc的BLog 的《asp.net里导出excel表方法汇总 》
http://powerlc.cnblogs.com/archive/2005/01/06/87512.aspx
浪漫十一狼的Net日志 的《导出excel的另外一种方法》
http://elevenwolf.cnblogs.com/archive/2004/08/21/35324.aspx
4。不引用Excel接口,直接生成Excel文件的。
这里灵感之源写了一篇Blog
特别推荐:纯VB.NET代码直接生成Excel文件(不需要Excel)
http://www.cnblogs.com/unruledboy/archive/2004/07/07/22093.aspx
这里是C#版本
与灵感之源的vb.net对应的SmartExcel的C#版本
这个东西,我引用作者的一句话
5。用MIME格式描述多内容Excel工作表
有点象生成HTML,但不完全是。
这是由鸟食轩写的《用MIME格式描述多内容Excel工作表》
http://www.cnblogs.com/birdshome/archive/2005/07/12/190988.html
(鸟食轩是javascript应用的高手
,他在自己Blog上面的百度搜索帖子功能,让我对javascript有了更多的理解)
这里已经说到有5种方法,难道还有?
是啊,是啊
我再说两种,嘿嘿,
6。Excel是可以存成xml
看看这个文件

在看看保存出来的Excel文件:

虽然已经交过作业了,但每次温习居然都有新的感受和发现。
于是,再写一篇总结(也不知道是不是以后还会再写总结?

我这里简单复习一下有哪几种可以导出Excel的方法:
1。把excel作为数据库,导入数据。
这里分成两种:
一种是把excel作为connection,通过insert数据加入;
另一种,则是利用COM对象,调用Excel的QueryTables的方法。
2。直接引用COM组件,直接通过接口调用,并生成相应的Excel文件。
这种方法对于性能要求要高一些。
对B/S结构的程序,基本不考虑这种方法。
对于无法关闭Excel进程的问题,今天看到一篇《立即释放.net下的com组件》
http://jjstar.cnblogs.com/archive/2004/11/08/61316.html
我要试试看

3。利用生成HTML代码,保存为Excel文件
这个方法经常在B/S使用。
前三种方法的使用可以参考
Powerlc的BLog 的《asp.net里导出excel表方法汇总 》
http://powerlc.cnblogs.com/archive/2005/01/06/87512.aspx
浪漫十一狼的Net日志 的《导出excel的另外一种方法》
http://elevenwolf.cnblogs.com/archive/2004/08/21/35324.aspx
4。不引用Excel接口,直接生成Excel文件的。
这里灵感之源写了一篇Blog
特别推荐:纯VB.NET代码直接生成Excel文件(不需要Excel)
http://www.cnblogs.com/unruledboy/archive/2004/07/07/22093.aspx
这里是C#版本
与灵感之源的vb.net对应的SmartExcel的C#版本
这个东西,我引用作者的一句话
5。用MIME格式描述多内容Excel工作表
有点象生成HTML,但不完全是。
这是由鸟食轩写的《用MIME格式描述多内容Excel工作表》
http://www.cnblogs.com/birdshome/archive/2005/07/12/190988.html
(鸟食轩是javascript应用的高手

这里已经说到有5种方法,难道还有?
是啊,是啊

我再说两种,嘿嘿,
6。Excel是可以存成xml
看看这个文件

在看看保存出来的Excel文件:
1
<?xml version="1.0"?>
2
<?mso-application progid="Excel.Sheet"?>
3
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
4
xmlns:o="urn:schemas-microsoft-com:office:office"
5
xmlns:x="urn:schemas-microsoft-com:office:excel"
6
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
7
xmlns:html="http://www.w3.org/TR/REC-html40">
8
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
9
<Created>1996-12-17T01:32:42Z</Created>
10
<LastSaved>2006-02-17T13:16:06Z</LastSaved>
11
<Version>11.5606</Version>
12
</DocumentProperties>
13
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
14
<RemovePersonalInformation/>
15
</OfficeDocumentSettings>
16
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
17
<WindowHeight>4530</WindowHeight>
18
<WindowWidth>8505</WindowWidth>
19
<WindowTopX>480</WindowTopX>
20
<WindowTopY>120</WindowTopY>
21
<AcceptLabelsInFormulas/>
22
<ProtectStructure>False</ProtectStructure>
23
<ProtectWindows>False</ProtectWindows>
24
</ExcelWorkbook>
25
<Styles>
26
<Style ss:ID="Default" ss:Name="Normal">
27
<Alignment ss:Vertical="Bottom"/>
28
<Borders/>
29
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
30
<Interior/>
31
<NumberFormat/>
32
<Protection/>
33
</Style>
34
<Style ss:ID="s32">
35
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
36
<Font x:Family="Swiss" ss:Size="16"/>
37
</Style>
38
<Style ss:ID="s34">
39
<Borders>
40
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
41
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
42
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
43
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
44
</Borders>
45
<Font x:Family="Swiss" ss:Size="11" ss:Bold="1"/>
46
<Interior ss:Color="#CCFFCC" ss:Pattern="Solid"/>
47
</Style>
48
<Style ss:ID="s35">
49
<Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
50
<Borders>
51
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
52
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
53
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
54
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
55
</Borders>
56
<Font x:Family="Swiss" ss:Size="11"/>
57
</Style>
58
</Styles>
59
<Worksheet ss:Name="Sheet1">
60
<Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="22" x:FullColumns="1"
61
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
62
<Column ss:AutoFitWidth="0" ss:Width="92.25"/>
63
<Column ss:AutoFitWidth="0" ss:Width="123"/>
64
<Row ss:AutoFitHeight="0" ss:Height="37.5">
65
<Cell ss:MergeAcross="1" ss:StyleID="s32"><Data ss:Type="String">test excel Xml</Data></Cell>
66
</Row>
67
<Row ss:Height="15.75">
68
<Cell ss:StyleID="s34"><Data ss:Type="String">testCol1</Data></Cell>
69
<Cell ss:StyleID="s34"><Data ss:Type="String">testCol2</Data></Cell>
70
</Row>
71
<Row ss:Height="15">
72
<Cell ss:StyleID="s35"><Data ss:Type="Number">3432</Data></Cell>
73
<Cell ss:StyleID="s35"><Data ss:Type="Number">42343223</Data></Cell>
74
</Row>
75
<Row ss:Height="15">
76
<Cell ss:StyleID="s35"><Data ss:Type="Number">3432</Data></Cell>
77
<Cell ss:StyleID="s35"><Data ss:Type="Number">42343223</Data></Cell>
78
</Row>
79
<Row ss:Height="15">
80
<Cell ss:StyleID="s35"><Data ss:Type="Number">3432</Data></Cell>
81
<Cell ss:StyleID="s35"><Data ss:Type="Number">42343223</Data></Cell>
82
</Row>
83
<Row ss:Height="15">
84
<Cell ss:StyleID="s35"><Data ss:Type="Number">3432</Data></Cell>
85
<Cell ss:StyleID="s35"><Data ss:Type="Number">42343223</Data></Cell>
86
</Row>
87
<Row ss:Height="15">
88
<Cell ss:StyleID="s35"><Data ss:Type="Number">3432</Data></Cell>
89
<Cell ss:StyleID="s35"><Data ss:Type="Number">42343223</Data></Cell>
90
</Row>
91
<Row ss:Height="15">
92
<Cell ss:StyleID="s35"><Data ss:Type="Number">3432</Data></Cell>
93
<Cell ss:StyleID="s35"><Data ss:Type="Number">42343223</Data></Cell>
94
</Row>
95
96
</Table>
97
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
98
<Print>
99
<ValidPrinterInfo/>
100
<PaperSizeIndex>9</PaperSizeIndex>
101
<HorizontalResolution>300</HorizontalResolution>
102
<VerticalResolution>300</VerticalResolution>
103
</Print>
104
<Zoom>89</Zoom>
105
<Selected/>
106
<Panes>
107
<Pane>
108
<Number>3</Number>
109
<RangeSelection>R1C1:R22C2</RangeSelection>
110
</Pane>
111
</Panes>
112
<ProtectObjects>False</ProtectObjects>
113
<ProtectScenarios>False</ProtectScenarios>
114
</WorksheetOptions>
115
</Worksheet>
116
<Worksheet ss:Name="Sheet2">
117
<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
118
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
119
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
120
<ProtectObjects>False</ProtectObjects>
121
<ProtectScenarios>False</ProtectScenarios>
122
</WorksheetOptions>
123
</Worksheet>
124
<Worksheet ss:Name="Sheet3">
125
<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
126
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
127
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
128
<ProtectObjects>False</ProtectObjects>
129
<ProtectScenarios>False</ProtectScenarios>
130
</WorksheetOptions>
131
</Worksheet>
132
</Workbook>
133

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

yes,就是生成这么一个文件就可以了。
你可以把xml后缀名改成.xls,用Excel打开是一模一样的东西。
这个文件可以很快得到,只需将目前手里的Excel文件另存为xml(excel 2000也支持),
7。使用vbScript来生成Excel
以前我有个同事写了一个非常复杂的asp程序导出excel,实际上使用的是asp+vbScript来生成Excel,
(相比C#操作Excel,vsscript更有效率优势。)
但后来,我们过渡到.net程序了,我们也在没有管vbscript来导出Excel,因为它过于繁杂而不可维护和重用(其他项目中)。
再后来,通过对象编程的实践,才发现抽象能力是OPP思想中重要的能力,提炼问题核心建立相应模型,再来谈论解决方法。
单用vbscript来生成的确很麻烦,而且不好维护。
我们需要加入自己的模型。
这篇blog的地址《作一个Excel exporter的组件》
http://www.cnblogs.com/king_astar/archive/2005/12/25/304306.aspx
第三方方法
Eunge
《报表的开发利器-ExcelQuicker》
http://lovinger2000.cnblogs.com/archive/2005/06/27/181853.aspx