title: Having trouble reading excel file with the OpenXML sdk
body: <p>I have a function that reads from an excel file and stores the results in a <code>DataSet</code>. I have another function that writes to an excel file. When I try to read from a regular human-generated excel file, the excel reading function returns a blank <code>DataSet</code>, but when I read from the excel file generated by the writing function, it works perfectly fine. The function then will not work on a regular generated excel file, even when I just copy and paste the contents of the function generated excel file. I finally tracked it down to this, but I have no idea where to go from here. Is there something wrong with my code?</p>
  
  <p>Here is the excel generating function:</p>
  
  <pre><code>public static Boolean writeToExcel(string fileName, DataSet data)
  {
      Boolean answer = false;
      using (SpreadsheetDocument excelDoc = SpreadsheetDocument.Create(tempPath + fileName, SpreadsheetDocumentType.Workbook))
      {
          WorkbookPart workbookPart = excelDoc.AddWorkbookPart();
          workbookPart.Workbook = new Workbook();
          WorksheetPart worksheetPart = workbookPart.AddNewPart&lt;WorksheetPart&gt;();
          Sheets sheets = excelDoc.WorkbookPart.Workbook.AppendChild&lt;Sheets&gt;(new Sheets());
          Sheet sheet = new Sheet()
          {
              Id = excelDoc.WorkbookPart.GetIdOfPart(worksheetPart),
              SheetId = 1,
              Name = "Page1"
          };
  
          sheets.Append(sheet);
  
          CreateWorkSheet(worksheetPart, data);
          answer = true;
      }
  
      return answer;
  }
  
  private static void CreateWorkSheet(WorksheetPart worksheetPart, DataSet data)
  {
      Worksheet worksheet = new Worksheet();
      SheetData sheetData = new SheetData();
      UInt32Value currRowIndex = 1U;
      int colIndex = 0;
      Row excelRow;
      DataTable table = data.Tables[0];
  
      for (int rowIndex = -1; rowIndex &lt; table.Rows.Count; rowIndex++)
      {
          excelRow = new Row();
          excelRow.RowIndex = currRowIndex++;
          for (colIndex = 0; colIndex &lt; table.Columns.Count; colIndex++)
          {
              Cell cell = new Cell()
              {
                  CellReference = Convert.ToString(Convert.ToChar(65 + colIndex)),
                  DataType = CellValues.String
              };
  
              CellValue cellValue = new CellValue();
  
              if (rowIndex == -1)
              {
                  cellValue.Text = table.Columns[colIndex].ColumnName.ToString();
              }
              else
              {
                  cellValue.Text = (table.Rows[rowIndex].ItemArray[colIndex].ToString() != "") ? table.Rows[rowIndex].ItemArray[colIndex].ToString() : "*";
              }
  
              cell.Append(cellValue);
              excelRow.Append(cell);
          }
  
          sheetData.Append(excelRow);
      }
  
      SheetFormatProperties formattingProps = new SheetFormatProperties()
      {
          DefaultColumnWidth = 20D,
          DefaultRowHeight = 20D
      };
  
      worksheet.Append(formattingProps);
      worksheet.Append(sheetData);
      worksheetPart.Worksheet = worksheet;
  }
  </code></pre>
  
  <p>while the reading function is as following:</p>
  
  <pre><code>public static void readInventoryExcel(string fileName, ref DataSet set)
  {
      using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false))
      {
          WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
          WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
          SheetData sheetData = worksheetPart.Worksheet.Elements&lt;SheetData&gt;().First();
          int count = -1;
          foreach (Row r in sheetData.Elements&lt;Row&gt;())
          {
              if (count &gt;= 0)
              {
                  DataRow row = set.Tables[0].NewRow();
                  row["SerialNumber"]         = r.ChildElements[1].InnerXml;
                  row["PartNumber"]           = r.ChildElements[2].InnerXml;
                  row["EntryDate"]            = r.ChildElements[3].InnerXml;
                  row["RetirementDate"]       = r.ChildElements[4].InnerXml;
                  row["ReasonForReplacement"] = r.ChildElements[5].InnerXml;
                  row["RetirementTech"]       = r.ChildElements[6].InnerXml;
                  row["IncludeInMaintenance"] = r.ChildElements[7].InnerXml;
                  row["MaintenanceTech"]      = r.ChildElements[8].InnerXml;
                  row["Comment"]              = r.ChildElements[9].InnerXml;
                  row["Station"]              = r.ChildElements[10].InnerXml;
                  row["LocationStatus"]       = r.ChildElements[11].InnerXml;
                  row["AssetName"]            = r.ChildElements[12].InnerXml;
                  row["InventoryType"]        = r.ChildElements[13].InnerXml;
                  row["Description"]          = r.ChildElements[14].InnerXml;
                  set.Tables[0].Rows.Add(row);
              }
              count++;
          }
      }
  }
  </code></pre>