【功能目標】
1、外部插件使用學習
2、對數據進行EXCEL保存
【效果圖】
效果圖如下所示:


【代碼講解】
1、添加引用
首先在資源管理器中添加引用,如下圖所示。右擊添加引用
再到擴展里面尋找需要用到的插件。
譬如我們使用EXCEL插件


如下圖所示(EXCEL插件)
此時你就可以再程序中調用EXCEL了。

2、創建新建文件窗口
此處需要用到一個類SaveFileDialog
相關介紹參考官方文件
https://msdn.microsoft.com/zh-cn/library/system.windows.forms.savefiledialog.aspx
我們需要掌握的總結如下
//可能要獲取的路徑名 string localFilePath = "", fileNameExt= "", newFileName= "", FilePath = ""; SaveFileDialog saveFileDialog = new SaveFileDialog(); //設置文件類型 //書寫規則例如:txt files(*.txt)|*.txt saveFileDialog.Filter = "txt files(*.txt)|*.txt|xls files(*.xls)|*.xls|All files(*.*)|*.*"; //設置默認文件名(可以不設置) saveFileDialog.FileName = "siling-Data"; //主設置默認文件extension(可以不設置) saveFileDialog.DefaultExt = "xml"; //獲取或設置一個值,該值指示如果用戶省略擴展名,文件對話框是否自動在文件名中添加擴展名。(可以不設置) saveFileDialog.AddExtension = true; //設置默認文件類型顯示順序(可以不設置) saveFileDialog.FilterIndex = 2; //保存對話框是否記憶上次打開的目錄 saveFileDialog.RestoreDirectory = true; // Show save file dialog box DialogResult result = saveFileDialog.ShowDialog(); //點了保存按鈕進入 if (result == DialogResult.OK) { //獲得文件路徑 localFilePath = saveFileDialog.FileName.ToString(); //獲取文件名,不帶路徑 //fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //獲取文件路徑,不帶文件名 //FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("\\")); //給文件名前加上時間 //newFileName = DateTime.Now.ToString("yyyyMMdd") + fileNameExt; //在文件名里加字符 //saveFileDialog.FileName.Insert(1,"dameng"); //為用戶使用 SaveFileDialog 選定的文件名創建讀/寫文件流。 //System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog.OpenFile();//輸出文件 //fs可以用於其他要寫入的操作 } |
設計代碼如下
private string ShowSaveFileDialog() { string localFilePath = "";// fileNameExt, newFileName, FilePath; SaveFileDialog sfd = new SaveFileDialog();//保存文件窗口 //設置文件類型 sfd.Filter = "Excel文件(*.xlsx)|*.xlsx";//保存類型為EXCEL //保存對話框是否記憶上次打開的目錄 sfd.RestoreDirectory = true; //點了保存按鈕進入 if (sfd.ShowDialog() == DialogResult.OK) { localFilePath = sfd.FileName.ToString(); //獲得文件路徑 //string fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //獲取文件名,不帶路徑 //獲取文件路徑,不帶文件名 //FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("\\")); } return localFilePath;//返回值為地址 } |
3、文件寫入
介紹一個Application類
Microsoft.Office.Interop.Excel.Application - 就是我們的excel應用程序類。
Workbook - 就是我們平常見的一個個excel文件,經常是使用Workbooks類對其進行操作。
Worksheet - 就是excel文件中的一個個sheet頁。
Worksheet.Cells[row, column] - 就是某行某列的單元格,注意這里的下標row和column都是從1開始的,跟我平常用的數組或集合的下標有所不同。
首先創建一個EXCEL文檔,調用上面我們做得那個方法。
然后新建一個EXCEL類,然后操作如下程序所示
private void Btn_DataSave_Click(object sender, EventArgs e) {//數據存儲 /*******************數據導入Excel**********************/ string fileName = ShowSaveFileDialog(); //文件的保存路徑和文件名 try { // 創建Excel文檔類 Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); //創建EXCEL文檔 Microsoft.Office.Interop.Excel.Workbook ExcelDoc = ExcelApp.Workbooks.Add(Type.Missing); // 創建一個EXCEL頁 Microsoft.Office.Interop.Excel.Worksheet xlSheet = ExcelDoc.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); ExcelApp.DisplayAlerts = false; // 單元格下標是從[1,1]開始的 xlSheet.Cells[1, 1] = "序號"; xlSheet.Cells[1, 2] = "電壓"; xlSheet.Cells[1, 3] = "SOC"; xlSheet.Cells[1, 4] = "SOH"; xlSheet.Cells[1, 5] = "溫度"; //遍歷存數據 for (int i = 0; i < 100; i++) { xlSheet.Cells[i + 2, 1] = "電池" + i.ToString(); } for (int i = 0; i < 100;i++ ) { xlSheet.Cells[i + 2, 2] = Voltage_Battery[i].Text; } for (int i = 0; i < 100; i++) { xlSheet.Cells[i + 2, 3] = Soc_Battery[i].Text; } for (int i = 0; i < 100; i++) { xlSheet.Cells[i + 2, 4] = Soh_Battery[i].Text; } // 文件保存完畢輸出信息 //將此頁保存到我們新建的文檔中 xlSheet.SaveAs(fileName); //釋放EXCEL資源 ExcelDoc.Close(Type.Missing, fileName, Type.Missing); ExcelApp.Quit(); MessageBox.Show("數據保存成功!"); } catch { MessageBox.Show("數據保存失敗!"); } } |
更多介紹參考
https://wenku.baidu.com/view/a753ecc4b4daa58da1114a5e.html
詳細代碼請到我的GitHub上獲取
https://github.com/Harryjun/BMS