C#學習與上位機開發之文件操作(EXCEL保存案例)


【功能目標】

1、外部插件使用學習

2、對數據進行EXCEL保存

【效果圖】

效果圖如下所示:

imageimage

 

【代碼講解】

 

1、添加引用

首先在資源管理器中添加引用,如下圖所示。右擊添加引用

再到擴展里面尋找需要用到的插件。

譬如我們使用EXCEL插件

imageimage

如下圖所示(EXCEL插件)

此時你就可以再程序中調用EXCEL了。

image

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM