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

posted @ 2017-05-05 21:55  #Cloud  阅读(7673)  评论(0编辑  收藏  举报