zoukankan      html  css  js  c++  java
  • C# Execl表格文件转xml文件

      在我们的工作中可能会需要到让execl表格转换成xml文件来使用,这样程序读取数据来也比较方便

      下面就写一个小程序来实现execl表格转换成xml文件来使用

      

      会使用到的知识点如下

      1:引用第三方Execl库

      如图:我使用的

      添加引用的步骤如下

      

      

      然后指定库文件的路径就行!

      我是放在了应用程序的当前目录下了。

      2:Directory类   命名空间System.IO

      公开用于通过目录和子目录进行创建、移动和枚举的静态方法。此类不能被继承

      主要用到以下方法:

      GetCurrentDirectory()   获取应用程序的当前工作目录

      public static string[] GetFiles(  string path )    返回指定目录中文件的名称(包括其路径)。

      publicstaticstring[] GetFiles(  string path,  string searchPattern )    返回指定目录中与指定的搜索模式匹配的文件的名称(包含其路径)

      3:Path类     命名空间System.IO

       对包含文件或目录路径信息的 String 实例执行操作。 这些操作是以跨平台的方式执行的

      返回指定路径字符串的文件名和扩展名。 public static string GetFileName(  string path )

      返回不具有扩展名的指定路径字符串的文件名。 public static string GetFileNameWithoutExtension(  string path )

       4:程序如下:

      这个程序如果你不输入文件的名字的话,会把应用程序当前目录下object/的所有文件都会转换成xml文件,如果你输入相应的execl文件名字,则只会转换你输入的execl文件(可以输入多个)

      我的目录结构如下::

      

      1 using System;
      2 using System.IO;
      3 using System.Collections.Generic;
      4 using System.Linq;
      5 using System.Text;
      6 using System.Threading.Tasks;
      7 using Excel;
      8 using System.Data;
      9 using System.Xml;
     10 
     11 namespace ClientObjectTransform
     12 {
     13     class Program
     14     {
     15         static void Main(string[] args)
     16         {
     17             string str;
     18             Console.WriteLine("请输入Excel文件名字(可输入1个,多个,也可以不输入)::");
     19             str = Console.ReadLine();
     20             args = str.Split(' ');
     21             if ( args.Length >= 1 )
     22             {
     23                 Console.WriteLine("你输入的文件名字为::");
     24                 for (int i = 0; i < args.Length; i++)
     25                 {
     26                     Console.WriteLine(string.Format("{0}::{1}", i + 1, args[i]));
     27                 }
     28             }
     29             LoadExcelData(args);
     30         }
     31 
     32         static void LoadExcelData(string[] strFileNames)
     33         {
     34             //获取当前应用程序目录下的所有文件名
     35             string[] strFiels = Directory.GetFiles(Directory.GetCurrentDirectory() + "/object/", "*.xls*", SearchOption.TopDirectoryOnly);
     36 
     37             if ( strFileNames.Length >= 1 )
     38             {
     39                 
     40                 foreach (string strName in strFileNames)
     41                 {
     42                     string str = Directory.GetCurrentDirectory() + "/object/"+strName + ".xlsx";
     43                     //Console.Write("str file:{0}", str);
     44                     if (strFiels.Contains(str))
     45                     {
     46                         LoadOneFile(str);
     47                     }
     48                 }
     49             }
     50 
     51             else
     52             {
     53                 foreach (string strPath in strFiels)
     54                 {
     55                     if ( strPath.Length > 0 )
     56                     {
     57                         LoadOneFile(strPath);
     58                     }
     59                 }
     60             }
     61             Console.Write("按任意键退出...");
     62             Console.ReadKey(true);
     63         }
     64 
     65         static void LoadOneFile(string strPath)
     66         {
     67             FileInfo fileinfo = new FileInfo(strPath);
     68             FileStream filestream;
     69 
     70             if (fileinfo != null)
     71             {
     72                 filestream = fileinfo.Open(FileMode.Open, FileAccess.Read); //FileAccess::指定对文件的读取和写入访问。
     73                 IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(filestream);
     74                 filestream.Close();
     75 
     76                 // 第二行是key 第三行是类型,所以从第四行开始读就可以
     77 
     78                 DataSet result = excelReader.AsDataSet();
     79                 DataTable datatable = result.Tables[0];
     80 
     81                 int columns = datatable.Columns.Count; //execl列
     82                 int rows = datatable.Rows.Count; //execl行
     83 
     84                 XmlDocument xmlDoc = new XmlDocument();
     85                 XmlNode rootNode = xmlDoc.CreateElement("object"); //假如根元素
     86 
     87                 string filename = Path.GetFileNameWithoutExtension(strPath);
     88 
     89                 for (int i = 3; i < rows; i++)
     90                 {
     91                     XmlNode objectNode = xmlDoc.CreateElement(filename);
     92                     for (int j = 0; j < columns; j++)
     93                     {
     94                         string val = datatable.Rows[i][j].ToString();
     95                         bool bErrorData = (i == 1 || i == 2 || j == 0) && val.Length == 0;
     96                         if (bErrorData)
     97                         {
     98                             Console.Write("file:{0} key or type is null", filename);
     99                             continue;
    100                         }
    101 
    102                         string nodeName = datatable.Rows[1][j].ToString();
    103                         if (nodeName.Length == 0)
    104                         {
    105                             continue;
    106                         }
    107 
    108                         XmlNode objectChildNode = xmlDoc.CreateElement(nodeName);
    109 
    110                         XmlAttribute valAttr = xmlDoc.CreateAttribute("value"); //属性
    111                         valAttr.Value = val;
    112                         objectChildNode.Attributes.Append(valAttr);
    113 
    114                         XmlAttribute typeAttr = xmlDoc.CreateAttribute("type");
    115                         typeAttr.Value = datatable.Rows[2][j].ToString();
    116                         objectChildNode.Attributes.Append(typeAttr);
    117 
    118                         objectNode.AppendChild(objectChildNode);
    119                     }
    120 
    121                     rootNode.AppendChild(objectNode);
    122                 }
    123 
    124                 excelReader.Close();
    125 
    126                 xmlDoc.AppendChild(rootNode);
    127 
    128                 xmlDoc.Save(Directory.GetCurrentDirectory() + "/clientobject/" + filename + ".xml");  //保存转换好的xml文件到指定目录
    129             }
    130         }
    131     }
    132 }


    程序运行的结果

    这样就会得到对应的xml文件了.

  • 相关阅读:
    UML 2.5版本与UML分类概述
    Android 使用MySQL直接访问数据库
    带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变
    升级到Android Studio3.x遇到的问题及解决方案
    [摩斯密码表]摩斯密码对照表
    【Eclipse】eclipse中格式化代码配置方法
    Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
    Mysql 5.5 replication 多数据库主从备份Master-Slave配置总结
    期望-pku-oj-1055:Tree
    MFC——从实现角度分析微云界面
  • 原文地址:https://www.cnblogs.com/cxq0017/p/5834191.html
Copyright © 2011-2022 走看看