How to read Excel XML file from .NET (C#.NET) application using System.Xml.Linq If client machine does not have Excel installed then you have to use Excel XML file for any read/write operation. You can create XML file from excel (save as "XML Spreadsheet 2003") and read from .NET application using System.Xml.Linq library. Let say you have some Excel XML template on the server location where MS office not installed and you have to read data from Excel XML template then you can do it by using System.Xml.Linq library, actually this is another way to read Excel file Below source code will give demo to read data from Excel XML by using XDocument NameSpace  using System.Xml.Linq; using System.IO; Source Code  private void button1_Click(object sender, RoutedEventArgs e) {   //for silverlight application File operation not allow from client side   // so we have to give option to select Excel xml file from client    // you can use file path if it is fixed file from server location   OpenFileDialog dlg = new OpenFileDialog();   dlg.Multiselect = false;   dlg.Filter = "Excel XML Files (*.xml)|*.xml";   //Open saved excel file into XML format (select Save as    //Type "XML Spreadsheet 2003")   bool? userClickedOK = dlg.ShowDialog();   string xml = string.Empty;   //If user select correct file then procced    if (userClickedOK == true)   {      FileInfo info = dlg.File;      Stream s = info.OpenRead();      StreamReader reader = new StreamReader(s);      xml = reader.ReadToEnd();      reader.Close();  }  else  {     //log error or display message for user to select file     return;  }  // load xml into XDocumemt object  XDocument doc = XDocument.Parse(xml);  //Query for Sheet1 from selected Worksheet   var worksheet = doc.Descendants().Where(x => (x.Name.LocalName == "Worksheet" && x.FirstAttribute.Value == "Sheet1"));  //Query for Filled rows   var rows = worksheet.Descendants().Where(x => x.Name.LocalName == "Row");  int rowCount = 0;  foreach (var row in rows)  {     if (String.IsNullOrEmpty(row.Value))     {        continue;     }    else    {      //I am allowing max 100 rows to read from sheet1        if (rowCount < 100)       {          //validating the header row, I am assuming very         // First row will be the HEADER         if (rowCount == 0)        {         //Read first row first cell value         if (string.Compare(row.Descendants().Elements().ElementAt(0).Value, "Emp Number", StringComparison.CurrentCultureIgnoreCase) != 0                         && string.Compare(row.Descendants().Elements().ElementAt(1).Value, "Emp Salary", StringComparison.CurrentCultureIgnoreCase) != 0                         && string.Compare(row.Descendants().Elements().ElementAt(2).Value, "Date of Birth", StringComparison.CurrentCultureIgnoreCase) != 0)  {    //return error for Invalid excel    break;  } } else {     //validating records     var cell = row.Descendants().Where(y => y.Name.LocalName == "Cell"); //Here you will get all value from excel,you need to check for Empty or null value //NOTE: If cell is empty then you will not get cell number here like you do not have any value filled on cell 2 then you will not get cell.ElementAt(2), this will be NULL to overcome this you can fill empty string (blank value) into the cell   string empNo = cell.ElementAt(0).Value; //Result will be 100, 200   string empSal = cell.ElementAt(1).Value;//Result will be 2000, 3000   string empDOB = cell.ElementAt(2).Value;//Result will be 10/10/1987, 1/1/1999, convert into desired date    format }  rowCount++; } else {     //return error for Invalid excel     break; } } }  } Assume you have data into Excel XML like below and Saved as "XML Spreadsheet 2003" format "Book1.xml" Emp Number                     Emp Salary          Date of Birth 100                                         2000                       10/10/1987 200                                         3000                       1/1/1999  | 
Thursday, June 02, 2011
How to read Excel XML file from .NET (C#.NET) application using System.Xml.Linq
Subscribe to:
Post Comments (Atom)
1 comment:
Hi there,
Thanks for the method, works great, but how I could get with this method only the Sheets of the Excel file.
Thanks.
Post a Comment