【问题标题】:reading selected data from an excel and creating and writing to an xml in c#从 excel 中读取选定的数据并在 c# 中创建和写入 xml
【发布时间】:2014-03-25 11:01:33
【问题描述】:

我有一个 .xls 文件,其中包含 5 列(id、name、address、phone、mobile)和各自的值。我必须以编程方式创建一个 xml 文件,并在 xml 文件中仅写入 5 个列值中的 3 个(id、name、mobile)。

我正在使用下面的代码从网络获取数据,并首先将其写入工作正常的 xls 文件。但是从 xls 获取数据并创建和写入 xml 是缺失的..

            FtpWebResponse response = (FtpWebResponse)req.GetResponse();
            Stream stream = response.GetResponseStream();
            byte[] buffer = new byte[2048];
            FileStream fs = new FileStream(DownloadedxlsFilePath, FileMode.Create);

            int ReadCount = stream.Read(buffer, 0, buffer.Length);
            while (ReadCount > 0)
            {
                fs.Write(buffer, 0, ReadCount);
                ReadCount = stream.Read(buffer, 0, buffer.Length);
            }
            ResponseDescription = response.StatusDescription;
            fs.Close();
            stream.Close();

所以有两种方法: 1.获取全部数据并选择需要的数据,然后创建并写入一个xml 2. 使用上述代码轻松将数据写入.xls 文件,然后使用C# 逻辑获取所需数据,然后写入xml。

任何人都可以在 c# 中对上述任何一种方法提供帮助吗?

【问题讨论】:

    标签: c# asp.net xml wpf windows-services


    【解决方案1】:

    这可能会有所帮助,但需要您进行一些修改。我使用以下代码从 Excel 文件中检索数据,将其写入数据表,然后遍历数据表中的每一行并将其写入数据库表。

    namespace CopyExcel
    {
        class Program
        {
            static void Main(string[] args)
            {
                var fileName = string.Format("{0}\\MaintList.xlsx", "C:\\Import");
                var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
                var db = new ModulesDataContext();
                var adapter = new OleDbDataAdapter("SELECT * FROM [WCR$]", connectionString);
                var ds = new DataSet();
                adapter.Fill(ds, "ExcelData");
    
                DataTable ExcelData = ds.Tables["ExcelData"]; // datatable to store retrieved Excel data
                var counter = 0;
                foreach (DataRow row in ExcelData.Rows)
                {
                    Module mod = new Module(); // this is the class built over my Module table
    
                    mod.SystemID = Convert.ToInt32(ExcelData.Rows[counter]["SysID"]);
                    mod.Module1 = ExcelData.Rows[counter]["Num"].ToString();
                    mod.Title = ExcelData.Rows[counter]["Title"].ToString();
                    mod.Type = "CAI";
    
                    // Save data to Module database table
                    db.Modules.InsertOnSubmit(mod);
                    db.SubmitChanges();
                    counter++;
                }
            }
        }
    }
    

    你可以修改,而不是写入数据表,你可以输出到 XML:

    var xElement = new XElement("systemid", Convert.ToInt32(ExcelData.Rows[counter]["SysID"]);
    xElement.Add(new XElement("module", ExcelData.Rows[counter]["Num"].ToString());
    xElement.Add(new XElement("title", ExcelData.Rows[counter]["Title"].ToString());
    etc...
    

    当然,您会处理自己的列,例如 idnamemobile

    【讨论】:

    • @凯文:谢谢凯文。我也需要将 xml 数据保存在一个 xml 文件中。所以我会检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多