zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    教育是什么?
    关于CTime::Format在Unicode下的输出问题及解决办法
    COleDateTime在Unicode下,Format函数会有问题。
    UNICODE字符集
    处理字符串String类和正则表达式
    关于datatable linq的转换
    js
    HDU 3874 Necklace
    HDU 1520 Anniversary party
    HDU 4314 Save the dwarfs
  • 原文地址:https://www.cnblogs.com/flyingjun/p/6815073.html
Copyright © 2011-2022 走看看