1.需要添加的引用

2.新建Xml转换为DataTable类
    class XmlToDataTableHepler
    {
        /// <summary>
        /// 存储到指定位置下
        /// </summary>
        /// <param name="filename">指定位置下文件名</param>
        /// <param name="dt">dataTable转换成Xml</param>
        public static void SaveXml(string filename,DataTable dt)
        {
            string strXml = ConvertDataTableToXml(dt);
            #region 写入数据
            using (FileStream fsWrite = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
            {

byte[] buffer = Encoding.Default.GetBytes(strXml);
                fsWrite.Write(buffer, 0, buffer.Length);
            }
            #endregion
        }

/// <summary>
        /// dataTable转换成Xml
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        private static string ConvertDataTableToXml(DataTable dt)
        {
            StringBuilder strXml = new StringBuilder();
            strXml.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            strXml.AppendLine("<ArrayOfHAHAData>");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                strXml.AppendLine("<HAHAData>");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    strXml.AppendLine("<" + dt.Columns[j].ColumnName + ">" + dt.Rows[i][j] + "</" + dt.Columns[j].ColumnName + ">");
                }
                strXml.AppendLine("</HAHAData>");
            }
            strXml.AppendLine("</ArrayOfHAHAData>");
            return strXml.ToString();
        }

/// <summary>
        /// 读取xml文件转换成DataTable
        /// </summary>
        /// <param name="fileName">指定位置下文件名</param>
        /// <returns></returns>
        public static DataTable ConvertXmlToDataTable(string fileName)
        {
            DataTable dt = null;
            DataSet DS = new DataSet();
            DS.ReadXml(fileName);
            dt = DS.Tables[0];
            return dt;
        }
    }
3.新建一个DataTable转换Excel类

此类参考博客 C#导入导出EXCEL实例包括2003和2007以上版本-罗分明网络博客
    class ExcelHepler
    {

/// <summary>
        /// 从Excel读取数据
        /// 只支持单表
        /// </summary>
        /// <param name="FilePath">文件路径</param>
        public static DataTable ReadFromExcel(string FilePath)
        {
            DataTable result = null;
            IWorkbook wk = null;
            string extension = System.IO.Path.GetExtension(FilePath); //获取扩展名
            try
            {
                using (FileStream fs = File.OpenRead(FilePath))
                {
                    if (extension.Equals(".xls")) //2003
                    {
                        wk = new HSSFWorkbook(fs);
                    }
                    else                         //2007以上
                    {
                        wk = new XSSFWorkbook(fs);
                    }
                }

//读取当前表数据
                ISheet sheet = wk.GetSheetAt(0);

//构建DataTable
                IRow row = sheet.GetRow(0);
                result = BuildDataTable(row);
                if (result != null)
                {
                    if (sheet.LastRowNum >= 1)
                    {
                        for (int i = 1; i < sheet.LastRowNum + 1; i++)
                        {
                            IRow temp_row = sheet.GetRow(i);
                            if (temp_row == null) { continue; }//2019-01-14 修复 行为空时会出错
                            List<object> itemArray = new List<object>();
                            for (int j = 0; j < result.Columns.Count; j++)//解决Excel超出DataTable列问题    lqwvje20181027
                            {
                                //itemArray.Add(temp_row.GetCell(j) == null ? string.Empty : temp_row.GetCell(j).ToString());
                                itemArray.Add(GetValueType(temp_row.GetCell(j)));//解决 导入Excel  时间格式问题  lqwvje 20180904
                            }

result.Rows.Add(itemArray.ToArray());
                        }
                    }
                }
                return result;

}
            catch (Exception ex)
            {
                return null;
            }
        }

/// <summary>
        /// 将DataTable数据导入到excel中
        /// </summary>
        /// <param name="data">要导入的数据</param>
        /// <param name="isColumnWritten">DataTable的列名是否要导入</param>
        /// <param name="sheetName">要导入的excel的sheet的名称</param>
        /// <returns>导入数据行数(包含列名那一行)</returns>
        public static int DataTableToExcel(DataTable data, string sheetName, string fileName, bool isColumnWritten)
        {
            int i = 0;
            int j = 0;
            int count = 0;
            ISheet sheet = null;
            IWorkbook workbook = null;

using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                if (fileName.IndexOf(".xlsx") > 0) // 2007版本
                    workbook = new XSSFWorkbook();
                else if (fileName.IndexOf(".xls") > 0) // 2003版本
                    workbook = new HSSFWorkbook();

try
                {
                    if (workbook != null)
                    {
                        sheet = workbook.CreateSheet(sheetName);
                    }
                    else
                    {
                        return -1;
                    }

if (isColumnWritten == true) //写入DataTable的列名
                    {
                        IRow row = sheet.CreateRow(0);
                        for (j = 0; j < data.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);
                        }
                        count = 1;
                    }
                    else
                    {
                        count = 0;
                    }

for (i = 0; i < data.Rows.Count; ++i)
                    {
                        IRow row = sheet.CreateRow(count);
                        for (j = 0; j < data.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
                        }
                        ++count;
                    }
                    workbook.Write(fs); //写入到excel

return count;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception: " + ex.Message);
                    return -1;
                }
            }
        }

private static DataTable BuildDataTable(IRow Row)
        {
            DataTable result = null;
            if (Row.Cells.Count > 0)
            {
                result = new DataTable();
                for (int i = 0; i < Row.LastCellNum; i++)
                {
                    if (Row.GetCell(i) != null)
                    {
                        result.Columns.Add(Row.GetCell(i).ToString());
                    }
                }
            }
            return result;
        }

/// <summary>
        /// 获取单元格类型
        /// </summary>
        /// <param name="cell"></param>
        /// <returns></returns>
        private static object GetValueType(ICell cell)
        {
            if (cell == null)
                return null;
            switch (cell.CellType)
            {
                case CellType.Blank: //BLANK:  
                    return null;
                case CellType.Boolean: //BOOLEAN:  
                    return cell.BooleanCellValue;
                case CellType.Numeric: //NUMERIC:  
                    short format = cell.CellStyle.DataFormat;
                    if (format != 0) { return Convert.ToDateTime(cell.DateCellValue).ToString("yyyy-MM-dd HH:mm:ss"); } else { return cell.NumericCellValue; }
                case CellType.String: //STRING:  
                    return cell.StringCellValue;
                case CellType.Error: //ERROR:  
                    return cell.ErrorCellValue;
                case CellType.Formula: //FORMULA:  
                default:
                    return "=" + cell.CellFormula;
            }
        }
    }
4.应用

private void button4_Click(object sender, EventArgs e)
        {
            DataTable dataTabale = null;
            string path = AppDomain.CurrentDomain.BaseDirectory + "Al.xlsx";
            dataTabale = ExcelHepler.ReadFromExcel(path);
            dataGridView1.DataSource = dataTabale;

string path2 = AppDomain.CurrentDomain.BaseDirectory + "A25.xml";

XmlToDataTableHepler.SaveXml(path2, dataTabale);
            MessageBox.Show("success");
        }

private void btnReadXml_Click(object sender, EventArgs e)
        {
            string path2 = AppDomain.CurrentDomain.BaseDirectory + "Al.xml";
            string fileName = AppDomain.CurrentDomain.BaseDirectory + "HeyHi.xlsx";
            DataTable dt = XmlToDataTableHepler.ConvertXmlToDataTable(path2);
            dataGridView1.DataSource = dt;
            ExcelHepler.DataTableToExcel(dt,"hello",fileName,true);
            MessageBox.Show("success");
        }

C# ---XML与Excel相互转换(DataTable)相关推荐

  1. Open XML操作Excel导入数据

    项目中发现使用OleDb(using System.Data.OleDb)相关对象处理Excel导入功能,不是很稳定经常出问题,需要把这个问题解决掉.项目组提出使用OpenXML来处理Excel的导入 ...

  2. 使用XML创建Excel文档

    使用XML创建Excel文档            原例子使用VB.Net写的,以下的用C#改写的代码 原文代码: http://www.gotdotnet.com/Community/UserSam ...

  3. XML与JavaBean相互转换工具

    XML与JavaBean相互转换工具 import com.thoughtworks.xstream.XStream; import java.util.Map; import java.util.I ...

  4. 转换文档参数_明明2秒可以搞定Word、Excel相互转换,你却用了半小时!真亏了...

    我们在用office三件套工作的时候,经常都需要对文件的格式进行转换,像是Word文档和Excel表格的转换,很多小伙伴都要花上半个小时甚至以上的时间才能搞定,效率实在不行.别担心,今天小编将分享能快 ...

  5. XML 和 JSON 相互转换

    XML 和 JSON 相互转换, 包括 attribute.转换的时候将 XML 属性转换成JSON 的时候, 前面用 @ 特殊字符表示 XML 属性 import java.io.Reader; i ...

  6. xml 转 excel  和xml 转excel 的 思路描述

    xml 转 excel  :1. 反射获取xml数据,2. 从xml中获取数据保存到xml里边 1. 得到xml文件 2. 得到xml里的数据, 嵌套函数读取xml 里的所有sheet数据,并且给sh ...

  7. 在线XML转Excel工具

    在线XML转Excel工具 在线XML转Excel工具 XML To Excel Converter 可帮助你在线将 XML 转换为 Excel 文件. XML To Excel Converter ...

  8. XML转Excel或Excel转XML|tinyxml简单使用|C++使用excel

    最近做了一个小工具,可以将XML和Excel之前互转. 里面用到的XML读写库是tinyxml,在Excel2010上运行,请先确保装了Excel,而不是WPS. 代码写的比较挫,一大坨,最近忙也懒得 ...

  9. python的txt、csv、ini、xml、excel文件相关操作

    python的txt.csv.ini.xml.excel文件相关操作 函数,一个用于专门实现某个功能的代码块(可重用) 内置函数 len.bin.oct.hex 等 自定义函数 # 定义了一个函数,功 ...

最新文章

  1. 27道高频Spring面试题,你能答对几个?
  2. python自学路线-Python最佳学习路线
  3. python3.5和pip3安装路径不匹配问题
  4. 应用化学:从二氯甲烷到四氯化碳
  5. VMware16教程:配置同一局域网内的主机能够访问其他主机中的虚拟机(以squid代理上网服务为例)
  6. mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式
  7. 诗歌rails 之with_options
  8. mac 电脑连接不上github_Mac电脑使用终端连接服务器及传输文件
  9. ucosii 如何确定定时器的时间_全国中小学寒假时间确定,家长如何安排孩子们假期更合理?...
  10. 数据仓库与数据挖掘实践期末复习总结
  11. Mac 安装JDK 8
  12. 计算机主板 也叫系统版,电脑主板是什么
  13. IT男不得不看的影视剧---《数字追凶》
  14. ASP.NET极速DataReader分页程序 - Gerry的专栏 - CSDNBlog
  15. knn闽南语是什么意思_林北是什么意思什么梗 林北梗的出处是什么
  16. 洗地机什么牌子最好?洗地机品牌排行榜前十名
  17. Y7000P电池0%解决办法
  18. css 浮动在最上层_css,如何让background img显示在最上层。
  19. java保存图片_java 保存图片
  20. avr c语言编译器,[VR虚拟现实]AVR单片机C语言编译器.doc

热门文章

  1. PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)
  2. 10分钟掌握Google搜索引擎关键用法
  3. scp 命令 不用手动输入密码
  4. 黑马程序员 多线程
  5. ipa在线安装搭建_iOS 13.6.1 插件首次兼容,掉签教你临时安装
  6. 【WPS表格】数据有效性、横竖排互换、删除重复项等
  7. 电源中W(瓦)和VA(伏安)的区别
  8. 多层地层中的井筒及地层温度解析
  9. 景联文科技:四种常见的3D点云标注方法
  10. 博图V15自动化许可证管理器打不开_@大学生:机械设计制造及其自动化专业电脑选购指南...