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文件了.

原文地址:https://www.cnblogs.com/cxq0017/p/5834191.html