【C#】Excel操作彙總
一、Excel多種操作方法
1、DataSet到Excel的檔案讀寫
https://www.cnblogs.com/liyunworld/p/11168153.html
2、DataTable與Excel的檔案讀寫
https://www.cnblogs.com/wofeiliangren/p/13612573.html
3、NPOI使用方法
(1)儲存與讀取
https://my.oschina.net/u/4399215/blog/3435686
https://blog.csdn.net/jkhmf/article/details/82946965
(2)利用NPOI在同一個Excel檔案中建立多個sheet
https://www.cnblogs.com/dyllove98/archive/2013/08/06/3241515.html
(3)設定EXCEL單元格數字格式
https://blog.csdn.net/xxs77ch/article/details/50237017
https://bbs.csdn.net/topics/390938286
(4)設定EXCEL單元格背景填充色
https://bbs.csdn.net/topics/390203526
4、Aspose.Cells.dll使用方法
(1)匯出匯入Excel/Doc
https://www.cnblogs.com/robinli/p/3453660.html
(2)設定單元格樣式
//Instantiating a Workbook object Workbook workbook = newWorkbook(); //Adding a new worksheet to the Workbook object int i = workbook.Worksheets.Add(); //Obtaining the reference of the newly added worksheet by passing its sheet index Worksheet worksheet = workbook.Worksheets[i]; //Adding the current system date to "A1" cell worksheet.Cells["A1"].PutValue(DateTime.Now);//Getting the Style of the A1 Cell Style style = worksheet.Cells["A1"].GetStyle(); //Setting the display format to number 15 to show date as "d-mmm-yy" style.Number = 15; //Applying the style to the A1 cell worksheet.Cells["A1"].SetStyle(style); //Adding a numeric value to "A2" cell worksheet.Cells["A2"].PutValue(20); //Getting the Style of the A2 Cell style = worksheet.Cells["A2"].GetStyle(); //Setting the display format to number 9 to show value as percentage style.Number = 9; //Applying the style to the A2 cell worksheet.Cells["A2"].SetStyle(style); //Adding a numeric value to "A3" cell worksheet.Cells["A3"].PutValue(2546); //Getting the Style of the A3 Cell style = worksheet.Cells["A3"].GetStyle(); //Setting the display format to number 6 to show value as currency style.Number = 6; //Applying the style to the A3 cell worksheet.Cells["A3"].SetStyle(style); //Saving the Excel file workbook.Save("C:\\book1.xls", SaveFormat.Excel97To2003); 當然開發人員還可以為單元格設定自定義顯示樣式,下面的程式碼就怎麼設定單元格自定義顯示樣式做舉例: //Instantiating a Workbook object Workbook workbook = new Workbook(); //Adding a new worksheet to the Excel object int i = workbook.Worksheets.Add(); //Obtaining the reference of the newly added worksheet by passing its sheet index Worksheet worksheet = workbook.Worksheets[i]; //Adding the current system date to "A1" cell worksheet.Cells["A1"].PutValue(DateTime.Now); //Getting the style of A1 cell Style style = worksheet.Cells["A1"].GetStyle(); //Setting the custom display format to show date as "d-mmm-yy" style.Custom = "d-mmm-yy"; //Applying the style to A1 cell worksheet.Cells["A1"].SetStyle(style); //Adding a numeric value to "A2" cell worksheet.Cells["A2"].PutValue(20); //Getting the style of A2 cell style = worksheet.Cells["A2"].GetStyle(); //Setting the custom display format to show value as percentage style.Custom = "0.0%"; //Applying the style to A2 cell worksheet.Cells["A2"].SetStyle(style); //Adding a numeric value to "A3" cell worksheet.Cells["A3"].PutValue(2546); //Getting the style of A3 cell style = worksheet.Cells["A3"].GetStyle(); //Setting the custom display format to show value as currency style.Custom = "£#,##0;[Red]$-#,##0"; //Applying the style to A3 cell worksheet.Cells["A3"].SetStyle(style); //Saving the Excel file workbook.Save("C:\\book1.xls", SaveFormat.Excel97To2003);
using Aspose.Cells; using System.Drawing; Workbook workbook=new Workbook(); Style style=workbook.Styles[workbook.Styles.Add()]; WorkSheet worksheet=workbook.WorkSheet[0]; //字型樣式 style.Font.Color = Color.Red;//字型顏色 style.Font.Size = 10;//字型大小 style.Font.IsBold = true;//字型加粗 style.Font.Name = "宋體";//文字字型 //單元格樣式 //單元格背景顏色 style.ForegroundColor = Color.Red;//紅色 style.ForegroundColor = Color.Gray;//灰色 style.ForegroundColor = Color.Yellow;//黃色 style.ForegroundColor = Color.Magenta;//紫紅色 style.ForegroundColor = Color.Orange;//橙色 style.ForegroundColor = Color.Pink;//粉紅 style.ForegroundColor = Color.Aqua;//淺藍 style.ForegroundColor = Color.PaleGreen;//淺綠 style.Pattern = BackgroundType.Solid; style.HorizontalAlignment = TextAlignmentType.Center;//水平居中 style.IsTextWrapped = true;//單元格內容自動換行 //邊框樣式 style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //左邊框 style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //右邊框 style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //上邊框 style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //下邊框 Range range= worksheet.Cells.CreateRange(0, 0, 1, 1);//第一行第一列單元格 range.ApplyStyle(style, new StyleFlag() { All=true});
https://www.cnblogs.com/mahatmasmile/p/7806118.html
https://blog.csdn.net/qq_38974638/article/details/108631101
5、spire.xls使用方法
(1)應用例項datagridview→.xlsx
https://blog.csdn.net/binbingbong/article/details/106051194
(2)給Excel新增、刪除數字簽名
https://www.cnblogs.com/Yesi/p/13959393.html
6、生成pdf
(1)iTextSharp方法
向pdf插入圖片:https://blog.csdn.net/weixin_41529093/article/details/104978740
生成pdf檔案流:https://www.cnblogs.com/albertay/p/6606305.html
(2)Spire.Pdf方法
使用匯總: https://www.cnblogs.com/Yesi/p/4289981.html
給PDF新增可見的數字簽名:https://www.cnblogs.com/Yesi/p/6665453.html
二、大資料匯出到Excel
(1)大量資料匯出到Excel
https://www.cnblogs.com/xiaoheihei/p/8315856.html
(2).NET下,實現大txt檔案讀取並寫入excel大檔案
https://blog.csdn.net/golduty2/article/details/89473030
三、讀取Excel單元格字串截斷問題
1、問題描述:
表格某一單元格內容過長,則上位機讀取Excel表時,字串將被截斷,導致資料缺失,對後續資料處理造成錯誤。
2、問題分析:
目前微軟提供了兩種Office Ole驅動來實現資料庫連線,分別為ACE版本和Jet版本。由於Jet引擎只可以訪問 Office 97-2003,故上位機程式碼中採用了呼叫Microsoft.ACE.OLEDB.12.0驅動的方式,利用Microsoft ACE引擎連線到工作簿,將Excel檔案作為資料來源來讀寫。
而OleDb讀取檔案的方式受Excel ISAM(Indexed Sequential Access Method,即索引順序存取方法)驅動程式的限制。在讀取過程中,Excel ISAM 驅動程式通過掃描sheet中前幾行(預設為8行)的內容來確定一個 Excel列的最合適的資料型別,然後選擇能夠代表其樣本中大部分值的資料型別,分配儲存大小。該資料型別通常為varchar,其大小為255字元。而實際使用中,常常會出現該列前8行字串在255個字元以內,8行以外的字串卻大於255個字元的情況,那麼這個時候使用OleDb讀取Excel就會將後面大於255的字串截斷。
3、改善措施與驗證結果:
經翻查資料,得到的解決方案為,通過修改登錄檔值來更改取樣行數。修改路徑如下(Excel 2016):
計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engines\Excel
TypeGuessRows取值範圍為0-16。當TypeGuessRows = 0時會掃描整個頁面再匹配合適的資料型別。但試驗後發現,該方法只適用於Jet引擎,對於使用ACE引擎的上位機,該方法無效。
在不修改表格讀取方式的情況下,一個可以實現字串正常讀取的措施是,把資料大於255的表格放到前8行。在前8行的判定中,資料已經超過255,則該列的資料型別會被設定得更大,就不會出現截斷的情況。
由於該方法會增加額外的工作量,不宜作為永久措施。目前的最佳方案是修改檔案讀取方式,用NPOI方法讀取Excel表格。該方法不受ISAM驅動程式限制,可以保證字串的完整性,同時可以滿足讀取高版本Excel檔案的需求。
經除錯,可以確保該方法能夠完整讀取單元格長度遠大於255的字串。
4、總結:
在處理單一、長度較短的表格時,可以優先選擇OleDb方式對錶格進行讀取;若每一單元格包含的資料型別較為複雜,則推薦在編寫上位機時使用NPOI方法讀取表格,保證資料處理的可靠性。