Excel选定区域生成XML(二)



    /// <summary>
    /// 与表样比较
    /// </summary>
    public class CompareSample
    {
        public CompareSample()
        {
            dtCheck = CreateDt();
        }

        private DataTable dtCheck;

        public DataTable DtCheck
        {
            get { return dtCheck; }
        }

        private DataTable CreateDt()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("row", typeof(int));
            dt.Columns.Add("column", typeof(int));
            dt.Columns.Add("content", typeof(string));
            return dt;
        }

        public void DtToXml(string fileName, string dir = "d:\\Log")
        {
            XmlDocument doc = new XmlDocument();
            doc.CreateXmlDeclaration("1.0", "utf-8", "yes");

            XmlNode root = doc.CreateElement("cells");
            doc.AppendChild(root);

            foreach (DataRow dr in dtCheck.Rows)
            {
                XmlNode cell = doc.CreateElement("cell");
                root.AppendChild(cell);

                XmlNode row = doc.CreateElement("row");
                cell.AppendChild(row);
                row.InnerText = dr["row"].ToString();

                XmlNode column = doc.CreateElement("column");
                cell.AppendChild(column);
                column.InnerText = dr["column"].ToString();

                XmlNode content = doc.CreateElement("content");
                cell.AppendChild(content);
                content.InnerText = dr["content"].ToString();

            }
            doc.Save(dir + "\\" + fileName);
        }

        public void AppendFromSelection(Excel.Range selection)
        {
            //Excel.Range rng = app.Selection;
            foreach (Excel.Range r in selection)
            {
                if (null != r.Value2)
                {
                    AppendRowFromRange(r);
                }
            }
            AddColumnLetter();
        }

        public void AppendRowFromRange(Excel.Range rng)
        {
            DataRow dr = dtCheck.NewRow();
            dr["row"] = rng.Row;
            dr["column"] = rng.Column;
            dr["content"] = rng.Text;
            dtCheck.Rows.Add(dr);
        }

        public void AppendFromXml(string fileName)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(fileName);
            XmlNodeList list = doc.SelectNodes("/cells/cell");
            if (null != list)
            {
                foreach (XmlNode item in list)
                {
                    DataRow dr = dtCheck.NewRow();
                    dr["row"] = int.Parse(item.SelectSingleNode("./row").InnerText);
                    dr["column"] = int.Parse(item.SelectSingleNode("./column").InnerText);
                    dr["content"] = item.SelectSingleNode("./content").InnerText;
                    dtCheck.Rows.Add(dr);
                }
                //Add Column Letter
                AddColumnLetter();
            }
        }

        private void AddColumnLetter()
        {
            dtCheck.Columns.Add("ColLetter", typeof(string));
            foreach (DataRow item in dtCheck.Rows)
            {
                item["ColLetter"] = MyCommon.IntToLetter(int.Parse(item["column"].ToString()));
            }

        }
    }
using Excel = Microsoft.Office.Interop.Excel;
using CpmBigDataImportService;
using System.Data;

namespace ExcelAddIn2
{
    public partial class Ribbon1
    {
        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {

        }

        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            Excel.Application app = Globals.ThisAddIn.Application;
            CompareSample cs = new CompareSample();
            /*
            cs.AppendFromXml(@"d:\log\x.xml");
            MyCommon.FillDtToWorksheet(app, cs.DtCheck);
             */
            Excel.Range rng = app.Selection;
            cs.AppendFromSelection(rng);
            MyCommon.FillDtToWorksheet(app, cs.DtCheck);
 

        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42678477/article/details/81435025