日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#操作Excel,套用模板并对数据进行分页

發布時間:2023/12/19 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#操作Excel,套用模板并对数据进行分页 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Demo文件下載

??1using?System;
??2using?System.IO;
??3using?System.Data;
??4using?System.Reflection;
??5using?System.Diagnostics;
??6using?cfg?=?System.Configuration;
??7//using?Excel;
??8
??9namespace?ExcelHelperTest
?10{
?11????/**////?<summary>
?12????///?功能說明:套用模板輸出Excel,并對數據進行分頁
?13????///?作????者:Lingyun_k
?14????///?創建日期:2005-7-12
?15????///?</summary>

?16????public?class?ExcelHelper
?17????{
?18????????protected?string?templetFile?=?null;
?19????????protected?string?outputFile?=?null;
?20????????protected?object?missing?=?Missing.Value;
?21
?22????????/**////?<summary>
?23????????///?構造函數,需指定模板文件和輸出文件完整路徑
?24????????///?</summary>
?25????????///?<param?name="templetFilePath">Excel模板文件路徑</param>
?26????????///?<param?name="outputFilePath">輸出Excel文件路徑</param>

?27????????public?ExcelHelper(string?templetFilePath,string?outputFilePath)
?28????????{
?29????????????if(templetFilePath?==?null)
?30????????????????throw?new?Exception("Excel模板文件路徑不能為空!");
?31
?32????????????if(outputFilePath?==?null)
?33????????????????throw?new?Exception("輸出Excel文件路徑不能為空!");
?34
?35????????????if(!File.Exists(templetFilePath))
?36????????????????throw?new?Exception("指定路徑的Excel模板文件不存在!");
?37
?38????????????this.templetFile?=?templetFilePath;
?39????????????this.outputFile?=?outputFilePath;
?40
?41????????}

?42
?43????????/**////?<summary>
?44????????///?將DataTable數據寫入Excel文件(套用模板并分頁)
?45????????///?</summary>
?46????????///?<param?name="dt">DataTable</param>
?47????????///?<param?name="rows">每個WorkSheet寫入多少行數據</param>
?48????????///?<param?name="top">行索引</param>
?49????????///?<param?name="left">列索引</param>
?50????????///?<param?name="sheetPrefixName">WorkSheet前綴名,比如:前綴名為“Sheet”,那么WorkSheet名稱依次為“Sheet-1,Sheet-2”</param>

?51????????public?void?DataTableToExcel(DataTable?dt,int?rows,int?top,int?left,string?sheetPrefixName)
?52????????{
?53????????????int?rowCount?=?dt.Rows.Count;????????//源DataTable行數
?54????????????int?colCount?=?dt.Columns.Count;????//源DataTable列數
?55????????????int?sheetCount?=?this.GetSheetCount(rowCount,rows);????//WorkSheet個數
?56????????????DateTime?beforeTime;????
?57????????????DateTime?afterTime;
?58????????????
?59????????????if(sheetPrefixName?==?null?||?sheetPrefixName.Trim()?==?"")
?60????????????????sheetPrefixName?=?"Sheet";
?61
?62????????????//創建一個Application對象并使其可見
?63????????????beforeTime?=?DateTime.Now;
?64????????????Excel.Application?app?=?new?Excel.ApplicationClass();
?65????????????app.Visible?=?true;
?66????????????afterTime?=?DateTime.Now;
?67
?68????????????//打開模板文件,得到WorkBook對象
?69????????????Excel.Workbook?workBook?=?app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,
?70????????????????????????????????missing,missing,missing,missing,missing,missing,missing);
?71
?72????????????//得到WorkSheet對象
?73????????????Excel.Worksheet?workSheet?=?(Excel.Worksheet)workBook.Sheets.get_Item(1);
?74
?75????????????//復制sheetCount-1個WorkSheet對象
?76????????????for(int?i=1;i<sheetCount;i++)
?77????????????{
?78????????????????((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);
?79????????????}

?80
?81????????????將源DataTable數據寫入Excel#region?將源DataTable數據寫入Excel
?82????????????for(int?i=1;i<=sheetCount;i++)
?83????????????{
?84????????????????int?startRow?=?(i?-?1)?*?rows;????????//記錄起始行索引
?85????????????????int?endRow?=?i?*?rows;????????????//記錄結束行索引
?86
?87????????????????//若是最后一個WorkSheet,那么記錄結束行索引為源DataTable行數
?88????????????????if(i?==?sheetCount)
?89????????????????????endRow?=?rowCount;
?90
?91????????????????//獲取要寫入數據的WorkSheet對象,并重命名
?92????????????????Excel.Worksheet?sheet?=?(Excel.Worksheet)workBook.Worksheets.get_Item(i);
?93????????????????sheet.Name?=?sheetPrefixName?+?"-"?+?i.ToString();
?94
?95????????????????//將dt中的數據寫入WorkSheet
?96????????????????for(int?j=0;j<endRow-startRow;j++)
?97????????????????{
?98????????????????????for(int?k=0;k<colCount;k++)
?99????????????????????{
100????????????????????????sheet.Cells[top?+?j,left?+?k]?=?dt.Rows[startRow?+?j][k].ToString();
101????????????????????}

102????????????????}

103
104????????????????//寫文本框數據
105????????????????Excel.TextBox?txtAuthor?=?(Excel.TextBox)sheet.TextBoxes("txtAuthor");
106????????????????Excel.TextBox?txtDate?=?(Excel.TextBox)sheet.TextBoxes("txtDate");
107????????????????Excel.TextBox?txtVersion?=?(Excel.TextBox)sheet.TextBoxes("txtVersion");
108
109????????????????txtAuthor.Text?=?"KLY.NET的Blog";
110????????????????txtDate.Text?=?DateTime.Now.ToShortDateString();
111????????????????txtVersion.Text?=?"1.0.0.0";
112????????????}

113????????????#endregion

114
115????????????//輸出Excel文件并退出
116????????????try
117????????????{
118????????????????workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);
119????????????????workBook.Close(null,null,null);
120????????????????app.Workbooks.Close();
121????????????????app.Application.Quit();
122????????????????app.Quit();
123
124????????????????System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
125????????????????System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
126????????????????System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
127
128????????????????workSheet=null;
129????????????????workBook=null;
130????????????????app=null;
131
132????????????????GC.Collect();
133????????????}

134????????????catch(Exception?e)
135????????????{
136????????????????throw?e;
137????????????}

138????????????finally
139????????????{
140????????????????Process[]?myProcesses;
141????????????????DateTime?startTime;
142????????????????myProcesses?=?Process.GetProcessesByName("Excel");
143
144????????????????//得不到Excel進程ID,暫時只能判斷進程啟動時間
145????????????????foreach(Process?myProcess?in?myProcesses)
146????????????????{
147????????????????????startTime?=?myProcess.StartTime;
148
149????????????????????if(startTime?>?beforeTime?&&?startTime?<?afterTime)
150????????????????????{
151????????????????????????myProcess.Kill();
152????????????????????}

153????????????????}

154????????????}

155????????????
156????????}

157
158????????
159????????/**////?<summary>
160????????///?獲取WorkSheet數量
161????????///?</summary>
162????????///?<param?name="rowCount">記錄總行數</param>
163????????///?<param?name="rows">每WorkSheet行數</param>

164????????private?int?GetSheetCount(int?rowCount,int?rows)
165????????{
166????????????int?n?=?rowCount?%?rows;????????//余數
167
168????????????if(n?==?0)
169????????????????return?rowCount?/?rows;
170????????????else
171????????????????return?Convert.ToInt32(rowCount?/?rows)?+?1;
172????????}

173
174
175????????/**////?<summary>
176????????///?將二維數組數據寫入Excel文件(套用模板并分頁)
177????????///?</summary>
178????????///?<param?name="arr">二維數組</param>
179????????///?<param?name="rows">每個WorkSheet寫入多少行數據</param>
180????????///?<param?name="top">行索引</param>
181????????///?<param?name="left">列索引</param>
182????????///?<param?name="sheetPrefixName">WorkSheet前綴名,比如:前綴名為“Sheet”,那么WorkSheet名稱依次為“Sheet-1,Sheet-2”</param>

183????????public?void?ArrayToExcel(string[,]?arr,int?rows,int?top,int?left,string?sheetPrefixName)
184????????{
185????????????int?rowCount?=?arr.GetLength(0);????????//二維數組行數(一維長度)
186????????????int?colCount?=?arr.GetLength(1);????//二維數據列數(二維長度)
187????????????int?sheetCount?=?this.GetSheetCount(rowCount,rows);????//WorkSheet個數
188????????????DateTime?beforeTime;????
189????????????DateTime?afterTime;
190????????????
191????????????if(sheetPrefixName?==?null?||?sheetPrefixName.Trim()?==?"")
192????????????????sheetPrefixName?=?"Sheet";
193
194????????????//創建一個Application對象并使其可見
195????????????beforeTime?=?DateTime.Now;
196????????????Excel.Application?app?=?new?Excel.ApplicationClass();
197????????????app.Visible?=?true;
198????????????afterTime?=?DateTime.Now;
199
200????????????//打開模板文件,得到WorkBook對象
201????????????Excel.Workbook?workBook?=?app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,
202????????????????missing,missing,missing,missing,missing,missing,missing);
203
204????????????//得到WorkSheet對象
205????????????Excel.Worksheet?workSheet?=?(Excel.Worksheet)workBook.Sheets.get_Item(1);
206
207????????????//復制sheetCount-1個WorkSheet對象
208????????????for(int?i=1;i<sheetCount;i++)
209????????????{
210????????????????((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);
211????????????}

212
213????????????將二維數組數據寫入Excel#region?將二維數組數據寫入Excel
214????????????for(int?i=1;i<=sheetCount;i++)
215????????????{
216????????????????int?startRow?=?(i?-?1)?*?rows;????????//記錄起始行索引
217????????????????int?endRow?=?i?*?rows;????????????//記錄結束行索引
218
219????????????????//若是最后一個WorkSheet,那么記錄結束行索引為源DataTable行數
220????????????????if(i?==?sheetCount)
221????????????????????endRow?=?rowCount;
222
223????????????????//獲取要寫入數據的WorkSheet對象,并重命名
224????????????????Excel.Worksheet?sheet?=?(Excel.Worksheet)workBook.Worksheets.get_Item(i);
225????????????????sheet.Name?=?sheetPrefixName?+?"-"?+?i.ToString();
226
227????????????????//將二維數組中的數據寫入WorkSheet
228????????????????for(int?j=0;j<endRow-startRow;j++)
229????????????????{
230????????????????????for(int?k=0;k<colCount;k++)
231????????????????????{
232????????????????????????sheet.Cells[top?+?j,left?+?k]?=?arr[startRow?+?j,k];
233????????????????????}

234????????????????}

235
236????????????????Excel.TextBox?txtAuthor?=?(Excel.TextBox)sheet.TextBoxes("txtAuthor");
237????????????????Excel.TextBox?txtDate?=?(Excel.TextBox)sheet.TextBoxes("txtDate");
238????????????????Excel.TextBox?txtVersion?=?(Excel.TextBox)sheet.TextBoxes("txtVersion");
239
240????????????????txtAuthor.Text?=?"KLY.NET的Blog";
241????????????????txtDate.Text?=?DateTime.Now.ToShortDateString();
242????????????????txtVersion.Text?=?"1.0.0.0";
243????????????}

244????????????#endregion

245
246????????????//輸出Excel文件并退出
247????????????try
248????????????{
249????????????????workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);
250????????????????workBook.Close(null,null,null);
251????????????????app.Workbooks.Close();
252????????????????app.Application.Quit();
253????????????????app.Quit();
254
255????????????????System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
256????????????????System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
257????????????????System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
258
259????????????????workSheet=null;
260????????????????workBook=null;
261????????????????app=null;
262
263????????????????GC.Collect();
264????????????}

265????????????catch(Exception?e)
266????????????{
267????????????????throw?e;
268????????????}

269????????????finally
270????????????{
271????????????????Process[]?myProcesses;
272????????????????DateTime?startTime;
273????????????????myProcesses?=?Process.GetProcessesByName("Excel");
274
275????????????????//得不到Excel進程ID,暫時只能判斷進程啟動時間
276????????????????foreach(Process?myProcess?in?myProcesses)
277????????????????{
278????????????????????startTime?=?myProcess.StartTime;
279
280????????????????????if(startTime?>?beforeTime?&&?startTime?<?afterTime)
281????????????????????{
282????????????????????????myProcess.Kill();
283????????????????????}

284????????????????}

285????????????}

286????????????
287????????}

288????}

289}

290

轉載于:https://www.cnblogs.com/lingyun_k/archive/2005/07/12/191740.html

總結

以上是生活随笔為你收集整理的C#操作Excel,套用模板并对数据进行分页的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲免费高清 | 亚洲欧美在线免费观看 | 亚洲国产精品尤物yw在线观看 | 国产最新在线视频 | 裸体的日本在线观看 | 四虎国产| 久久无码视频一区 | 少妇精品高潮欲妇又嫩中文字幕 | 国产一区二区三区在线视频 | 嫩草在线观看 | 少妇在线播放 | 国产精品国语自产拍在线观看 | 色综合天天综合网国产成人网 | 久久久久久九九 | 国产中文字幕一区 | 2014亚洲天堂 | 久草新在线| 日韩乱码人妻无码中文字幕 | 操大逼网站 | 巨大黑人极品videos精品 | 最近中文字幕mv免费高清在线 | 黄色一级片在线播放 | 欧美sm凌虐视频网站 | 国产精品国产三级国产aⅴ9色 | 国产做爰xxxⅹ久久久精华液 | 久久草av| 肉大榛一进一出免费视频 | 国产a免费观看 | 日日操网站 | 成人av激情 | www.777奇米 | 国产精品美女久久久久图片 | 成人手机在线免费视频 | 国产精品美女久久 | 色综合亚洲 | 欧美在线视频免费播放 | 精品国产精品国产偷麻豆 | 欧美一级免费观看 | 欧美mv日韩mv国产网站app | 美女写真福利视频 | 国产在线播放一区 | 色肉色伦交av色肉色伦 | 黄色a级片 | 国产精品一区二区免费 | 九一爱爱 | 成人黄色片免费 | 黄色片在线视频 | 国产精品一区二区人妻喷水 | 午夜影院在线观看 | 美日毛片| 久久久久国产精品熟女影院 | 特黄特黄视频 | 91国模 | 亚洲免费观看高清在线观看 | 四虎com| 绯色av一区二区三区高清 | 日日摸日日添日日碰9学生露脸 | 色综合天天色 | 观看免费av | 日产久久视频 | 午夜日韩| 久久成人a毛片免费观看网站 | 成人在线免费网站 | 国产精品丝袜黑色高跟鞋的设计特点 | 国产又粗又黄又猛 | 三上悠亚在线观看一区二区 | 日本少妇影院 | 色天堂影院| 国内一区二区 | 一本一道久久a久久精品综合 | 久久精品视频观看 | 免费成人深夜小野草 | 在线va视频 | 中文字幕色片 | 看全黄大色黄大片 | 亚洲精品粉嫩小泬 | 大j8福利视频导航 | 激情综合啪啪 | 人成亚洲 | 精品三级 | 在线观看aa | 亚洲一区二区三区在线免费观看 | 欧美日韩国产电影 | 久久久久久九九九 | 日本精品中文字幕 | 懂色av蜜臀av粉嫩av分享 | 午夜免费观看视频 | 美女三级黄色 | 久草久草 | 日韩人妻一区二区三区 | 综合精品一区 | 日韩在线高清 | 日韩人妻一区二区三区 | 欧美寡妇性猛交 | 麻豆国产在线播放 | 国产精品久久久久无码av色戒 | aaaaa级片| 国产午夜av| 国产精品影音先锋 |