首页 > 代码库 > C# Execl表格文件转xml文件

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 = http://www.mamicode.com/(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 =http://www.mamicode.com/ val;112                         objectChildNode.Attributes.Append(valAttr);113 114                         XmlAttribute typeAttr = xmlDoc.CreateAttribute("type");115                         typeAttr.Value = http://www.mamicode.com/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文件了.

C# Execl表格文件转xml文件