从excel读取选定的数据并在c#中创建和写入xml

时间:2014-03-25 11:01:34

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

我的.xls文件包含5列(ID,名称,地址,电话,移动设备)和各自的值。我必须以编程方式创建一个xml文件,并在xml文件中仅编写5个列中的3个值(id,name,mobile)。

我正在使用下面的代码从web获取数据并首先将其写入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#。

中对上述任何一种方法提供帮助

1 个答案:

答案 0 :(得分:0)

这可能有所帮助,但需要您进行一些修改。我使用下面的代码从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