999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

DataGridView控件中數據導出至Excel方案的優化與實現

2016-09-09 06:20:39吳吳雙溫州職業技術學院教務處浙江溫州325035
溫州職業技術學院學報 2016年2期
關鍵詞:優化方法系統

吳吳雙(溫州職業技術學院 教務處,浙江 溫州 325035)

DataGridView控件中數據導出至Excel方案的優化與實現

吳吳雙
(溫州職業技術學院 教務處,浙江 溫州 325035)

DataGridView控件是信息化系統廣泛應用的數據顯示控件,但并未提供與Excel文檔的交互功能.針對多種交互方法進行分析,通過使用Excel組件和設置Range對象的屬性,大大提高數據交互效率和穩定性;采用動態添加控制右鍵菜單方式,對交互完成后的Excel文件導出操作方式進行優化.測試結果表明,優化后控件的便捷性、移植性、美觀度和易用性得到了很大提升.

計算機;DataGridView控件;Excel;信息化

0 引 言

隨著計算機技術的迅猛發展,信息化系統已無處不在,大規模信息化系統的運行大多利用DataGridView控件展示數據信息,但原生DataGridView控件并未給用戶提供將數據導出至Excel軟件中進行二次處理的功能.這使得用戶無法快捷地與Excel辦公軟件進行交互,大大影響了工作效率和用戶體驗.DataGridView控件中數據導出至Excel的常用方法大致有直接復制法、逐行寫入法和系統剪切板整體寫入法三種方法.這三種方法均存在各自缺陷.本文比較分析三種方法的優缺點,提出DataGridView控件中數據導出至Excel功能集成,動態添加控件右鍵菜單的優化方案,解決了與Excel文檔的交互問題,提高了工作效率,改善了用戶體驗.

1 數據導出至Excel的三種方法

雖然微軟提供的DataGridView控件可以方便地顯示大量數據,但不支持與Excel文檔的交互.將Data-GridView控件中數據導出至Excel的常用方法有直接復制法、逐行寫入法、系統剪切板整體寫入法.

1.1直接復制法

選中DataGridView控件中數據按CTRL+C鍵復制至系統剪切板中,再人工打開Excel軟件,再按CTRL+V鍵將剪切板中數據復制至Excel.該方法雖然能將數據復制至Excel文檔,但因字符集的不同,經常會出現亂碼.

1.2逐行寫入法

利用COM組件集中的Excel組件建立一個Excel對象,由系統自動對DataGridView控件中所有數據進行循環,逐行逐條將數據寫入Sheet中.該方法只能逐行逐條寫入數據,導致工作效率低下,并且只能導出DataGridView控件中所有數據,無法按用戶要求導出特定區域數據,無法處理特殊字符和完成隱藏列的篩選,容易造成系統崩潰.

1.3系統剪切板整體寫入法

用戶可以將選定的內容或整體數據一次性填入Windows系統剪切板中,再在已創建的Sheet中發送一個CTRL+V鍵盤命令,將系統剪切板中的數據一次性粘貼至Sheet中.采用該方法,當系統發送鍵盤命令時,如用戶改變系統焦點,可能造成導出失敗.該方法存在的缺陷有:系統不能對Excel文檔進行格式設置導致格式丟失;因Excel的表格特性將字符串前的0去掉,如原始數據為001,導出結果為1,造成數據錯誤.

2 方案的優化與實現

比較以上三種方法可知,系統剪切板整體寫入法效率最高,出錯率最小.針對系統剪切板整體寫入法存在的缺陷提出優化方案.

2.1方案優化

2.1.1當在系統發送鍵盤命令時,用戶對系統進行了其他操作,如改變系統焦點,這時可能造成導出失敗,因而不采取模擬發送鍵盤的方法,而是采用Sheet.get_ Range("A1",System.Type.Missing)方法.該方法可以在粘貼數據前鎖定數據表的第一個單元格,避免因用戶操作丟失焦點而造成的導出失敗.

2.1.2采用Sheet.get_Range()方法設置文本格式.如當導出至Excel時保留"001"樣式,核心代碼為:

range=xlBook.get_Range("A1","A+"+rowNum+"");

range.MergeCells=true;

range.NumberFormatLocal="@";

該設置可以格式化系統剪切板中內容的格式,因而可以解決無法復制格式的問題.

2.1.3將原始數據格式進行預處理,解決因Excel表格特性將字符串前的0去掉的問題和特殊格式及內容出現亂碼的問題.其主要核心代碼[1]為:

if(DataGrid.Columns[i].ValueType.ToString()== "System.String")

{range=xlSheet.get_Range(xlApp.Cells[1,colIndex], xlApp.Cells[rowCount+1,colIndex]); range.NumberFormat="@"; }

預處理還可以對輸出文檔進行格式設置,如表格邊框類型、粗細及內容的對齊方式等.

2.1.4為進一步提高導出效率,采用將所有原始數據保存于二維數組中.在此基礎上,將二維數組一次性交于Excel對象的range變量,再采用range.Value2方法同時寫入所有數據.

2.1.5將列頭、邊框、字體、排列方式等屬性進行設置,使導出的Excel文檔更美觀,同時大大減少后期對格式調整的工作量.

2.1.6為進一步提高用戶體驗,將功能集成至控件右鍵菜單將是一個很好的方法.

2.2功能實現

以Visual Studio為開發環境,選擇C#編寫為設計語言.DataGridView控件中數據導出至Excel方案優化流程如圖1所示.

圖1 DataGridView控件中數據導出至Excel方案優化流程

2.2.1添加系統引用.在VS中實現與Excel文檔交互功能的有.net組件和.com組件,但實際應用中.com組件會涉及到許多問題,如權限方面的問題,因而一般引用.net組件.其添加方法如下:一是打開VS2010,在右側的已安裝模板中,選擇Visual C#,右邊會顯示出各種項目類型,第一項就是Windows窗體應用程序.二是在默認狀態下,系統會自動創建一個窗體程序,即主窗體程序,在右側解決方案中點擊新建好的窗體程序,選擇引用點擊右鍵,選擇.net組件,在組件列表中選擇Excel V11.0.0.0,點擊添加組件[2].

2.2.2系統進程清理.在實現與Office文檔交互功能時最容易出現的問題是,操作界面上已全部關閉Office文檔,卻在系統進程中殘留Excel進程,這樣將導致系統錯誤.因此,在打開Excel之前一定要進行一次進程清理.C#中使用"User32.dll"實現清理殘留Office進程.在調用"User32.dll"時要使用DllImport實現調用.DllImport的命名空間是System.Runtime.InteropServices,是該命名空間下的一個屬性類,Dll-Import提供從非托管DLL導出函數的必要調用信息.其添加方法[3]如下:雙擊打開窗體程序即可進入代碼編輯模式,輸入[DllImport("User32.dll",CharSet=Char-Set.Auto)]public static extern int GetWindow-ThreadProcessId(IntPtr hwnd, out int ID).在得到Excel進行ID時要特別注意一定要定義為靜態方法,否則無法得到進程ID.

2.2.3對Excel 2003與Excel 2007不同版本進行兼容性及對隱藏行、列處理.

Excel 2003的最大行是65 536行,最大列數是256列;Excel 2007的最大行是1 048 576,最大列數是16 384列.對行、列進行處理的代碼為:

if(DataGrid.Rows.Count > 65536 || DataGrid. ColumnCount>256)

{return false;}//判斷數據表中數據量是否大于65 536行或大于256列

2.2.4創建Excel對象、Workbook、Sheet工作表及設置Range對象.

(1)利用引用的Excel V11.0.0.0組件創建Excel Application對象,表示Excel應用程序本身.Application對象引用方法如下:Microsoft.Office.Interop.Excel.Application ExcelApplication=new Microsoft.Office.Interop.Excel.Application();

(2)創建Workbook、Sheet表.Workbook對象表示Excel應用程序內的單個工作簿,同時Excel提供一個Sheets集合作為Workbook對象的屬性.其核心代碼[4]如下:ExcelobjWorkbook=ExcelobjExcel.Application. Workbooks.Open(ExcelFileName,miss,miss,miss,miss, miss,miss,miss,miss,miss,miss,miss,miss,miss, miss).

(3)設置Range對象.Range對象表示一個單元格、一行、一列,包含一個或多個單元格塊(可以連續,也可以不連續)的單元格選定范圍,甚至多個Sheet表中的一組單元格.其方法如下:

Microsoft.Office.Interop.Excel.Range range;

(處理隱藏行)range.EntireRow.Hidden=true;

(設置內容對齊方式)RowAll.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

(設置文字大小)RowAll.Font.Size=8;

(設置邊框樣式)RowAll.Borders.LineStyle=Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

(設置為表頭加粗)range.Font.Bold=true.

2.2.5原始數據預處理.將原始數據格式進行預處理,主要是對數據格式,隱藏列、行進行處理,以及調整數據緩存并寫入緩存,為下一步提高整體寫入Exc el做好準備.其核心代碼如下:

if(DataGrid.Columns[i].ValueType.ToString() =="System.String")

range.NumberFormat="@";

上下合并實現,如選擇A1和A2兩個單位格,合并,設值.其實現代碼為:

range=wooksheet.get_Range(ExcelApp.Cells[1, 2],ExcelApp.Cells[1,3]);range.Merge(true);range. Value2="合并后需要顯示的名稱";

2.2.6寫入Excel及Excel格式設置.該步驟是對已預處理好的數據一次性寫入已創建的Excel表中,同時完成預設表的排版樣式.其核心代碼為:

range=xlSheet.get_Range(xlApp.Cells[1,1]//從表格第一行第一列開始,

xlApp.Cells[rowCount+1,colCount])//表格最后一行最后一列結束;

xlBook.Saved=true;xlBook.SaveCopyAs(fullFileName);ExportSuccess=true;}

(如保存成功返回ture,如有發現異常返回flash) catch{ExportSuccess=false;}

2.2.7Excel進程處理及釋放資源.為提高程序的高效和簡潔性,適時地進行釋放資源是必要的,這也是優質程序的必備條件.采用查找P I D的方法對已使用的Excel進程進行清理,而不采用進程名的方法進行清理,這樣可以有效避免用戶誤操作其他作業進程.其核心代碼[5]為:

xlApp.Quit();GetWindowThreadProcessId(t,out id);

System.Diagnostics.Process p=System.Diagnostics. Process.GetProcessById(id);

p.Kill();

2.2.8右鍵快捷菜單集成.采用動態添加菜單的方式生成菜單,可以大大提升控件便捷性、移植性、美觀度,使用戶獲得更好的體驗.

(1)新建菜單方法.

private void AddContextMenu()

{//實例化右鍵菜單

this.BozhaiContextMenu=new ContextMenu-Strip();

this.輸出到Excel文件ToolStripMenuItem=new ToolStripMenuItem();

this.輸出到Excel文件ToolStripMenuItem.Name= "輸出到Excel文件ToolStripMenuItem";}

(2)綁定Click事件.

this.輸出到Excel文件ToolStripMenuItem.Click+= new EventHandler(this.OutputFileToExcel);

(3)建立輸出到Excel文件的方法.

public void SaveAsFileToExcel(object sender, System.EventArgs e)

{if(this.ColumnCount==0||this.RowCount==0) {MessageBox.Show("沒有可保存的數據!","系統提示", MessageBoxButtons.OK,MessageBoxIcon.Information); return;}

SaveFileDialog SF=new SaveFileDialog();

SF.Filter="Microsoft Excel電子文檔(*.xls)|*. xls";

if(SF.ShowDialog()==DialogResult.OK)

{this.Cursor=Cursors.WaitCursor;

DataGridViewOperation.OutputOperate OO=new DataGridViewOperation.OutputOperate();

OO.OutputFileToExcel(this,SF.FileName, false); GC.Collect();

this.Cursor=Cursors.Default;}}

完成右鍵菜單綁定后,就可以用鼠標在控件上點擊右鍵,在彈出的菜單中選擇輸出到Excel文件.在提示中選擇要保存的路徑后點擊確定就能快捷地完成數據導出.DataGridView控件中數據導出至Excel優化方案運行界面如圖2所示.

圖2 DataGridView控件中數據導出至Excel優化方案運行界面

3 測 試

將DataGridView控件中數據導出至Excel的三種方法及其優化方案同時用于溫州職業技術學院的人事管理系統、督導管理系統、資產管理系統,測試模塊為在不通知情況下由全院教職工使用,經一學期實際應用后進行用戶回訪,共回訪50人次.測試結果表明,導出至Excel的三種方法未經優化前好評率為10%,優化后好評率為88%.

4 結束語

對DataGridView控件中數據導出至Excel三種方法進行比較分析,吸取不同方法的優點,引入數據緩存的方法,提高了寫入效率和減少差錯率;為進一步提高控件的便捷性、移植性、美觀度,動態添加控件右鍵菜單,大大提高了工作效率,改善了用戶體驗.

[1]CHRISTIAN N,EVJEN B,GLYNN J,等.C#高級編程(IX)[M].李銘,譯.北京:清華大學出版社,2014:120-123.

[2]李立功,祖曉東.SQL Server 2008項目開發教程(I)[M].北京:電子工業出版社,2010:42-46.

[3]c#的dllimport使用方法[EB/OL].(2008-06-31)[2016-02-15].http://www.jb51.net/article/46384.htm.

[4]丁士鋒,蔡平.ASP.NET項目開發指南[M].北京:清華大學出版社,2013:79-182.

[5]Microsoft.Office.Interop.Excel API應用(二)Workbook[EB/OL].(2012-06-01)[2016-02-15]. http://blog.csdn.net/yimeng_1985/article/details/7623638.

[責任編輯:王志梅]

Optimizing and Implementing the Method of Deriving Data to Excel in DataGridView Control

WU Shuang
(Teaching Affairs Department, Wenzhou Vocational & Technical College, Wenzhou, 325035, China)

DataGridView Control is a data display control widely used in information system, but it can't interact with Excel documents. Analysis has been done on various interactive methods. By using Excel components and fixing the property of Range object, data interactive efficiency and stability are greatly improved. In addition, dynamic addition is used to control right key menu in order to optimize the Excel document deriving process after interaction comes to an end. Testing findings demonstrate that the optimized control is greatly improved in terms of its convenience, portability, presentation, and being easy to use.

Computers; DataGridView control; Excel; Informationization

TP317

A

1671-4326(2016)02-0068-04

10.13669/j.cnki.33-1276/z.2016.042

2016-02-29

溫州職業技術學院科研項目(WZY2015012)

吳雙(1981-),男,浙江溫州人,溫州職業技術學院教務處,助理實驗師.

猜你喜歡
優化方法系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
主站蜘蛛池模板: 一级全黄毛片| 九九线精品视频在线观看| 国产成人h在线观看网站站| 欧美日韩亚洲国产主播第一区| 国产99热| 国产亚洲精品va在线| 国产一级一级毛片永久| 国产欧美专区在线观看| 久久国产精品无码hdav| 日本精品视频| 2020国产精品视频| 成人在线观看一区| 国产清纯在线一区二区WWW| 亚洲第七页| a亚洲视频| 青青青草国产| 国产白浆一区二区三区视频在线| 免费高清a毛片| 在线观看国产精品一区| 国产激情无码一区二区APP| 亚洲无码熟妇人妻AV在线| 亚洲av综合网| 114级毛片免费观看| 国产女同自拍视频| 久久这里只精品国产99热8| 亚洲资源在线视频| 亚洲一区网站| 在线综合亚洲欧美网站| 色婷婷视频在线| 国产流白浆视频| 欧美精品v| 久久精品嫩草研究院| 亚洲福利网址| 91啪在线| 欧美成人影院亚洲综合图| 国产美女主播一级成人毛片| 99视频国产精品| 国产成人免费视频精品一区二区| 最新亚洲人成无码网站欣赏网 | 色婷婷亚洲综合五月| 国产成人91精品免费网址在线| 精品国产福利在线| 国产高清在线观看91精品| 久久青草免费91线频观看不卡| 亚洲视频a| 国产福利免费视频| 国产a v无码专区亚洲av| 免费一级成人毛片| 少妇精品网站| 性做久久久久久久免费看| 日韩天堂视频| 亚洲国语自产一区第二页| 无码日韩人妻精品久久蜜桃| 国产人前露出系列视频| 日韩在线欧美在线| 黄色污网站在线观看| 在线观看91精品国产剧情免费| 精品無碼一區在線觀看 | 伊人成人在线| www.youjizz.com久久| 怡红院美国分院一区二区| 亚洲AV免费一区二区三区| 片在线无码观看| 青青久视频| 美女毛片在线| 爱做久久久久久| 在线a网站| 少妇人妻无码首页| 精品国产电影久久九九| 浮力影院国产第一页| 又猛又黄又爽无遮挡的视频网站| 漂亮人妻被中出中文字幕久久| 亚洲精品无码抽插日韩| 极品私人尤物在线精品首页 | 久青草国产高清在线视频| 久久精品国产91久久综合麻豆自制| 久久综合九九亚洲一区| 婷婷99视频精品全部在线观看| 精品亚洲麻豆1区2区3区| 国产一级毛片yw| 国产色网站| 狠狠综合久久|