-1

When I read cell value from OpenXML, the cell InnerText that I got is always Integer

using (SpreadsheetDocument document = SpreadsheetDocument.Open(INPUT_DIRECTORY, false))
            {
                WorkbookPart wbPart = document.WorkbookPart;

                foreach (Sheet sheet in wbPart.Workbook.Sheets)
                {
                    switch (sheet.Name.ToString())
                    {
                        case "ABC":

                            WorksheetPart wsPart = (WorksheetPart)wbPart.GetPartById(sheet.Id);
                            SheetData sheetdata = wsPart.Worksheet.Elements<SheetData>().FirstOrDefault();                            

                            foreach (Row r in sheetdata.Elements<Row>())
                            {
                                string xxx = r.Elements<Cell>().ElementAt(0).InnerText;
                                string yyy = r.Elements<Cell>().ElementAt(6).InnerText;
                                string zzz = r.Elements<Cell>().ElementAt(12).InnerText;
                            }                            

                            break;
                    }
                }
            }

xxx, yyy, zzz is always integer even it's a string with value.

jazb
  • 5,498
  • 6
  • 37
  • 44
TPG
  • 2,811
  • 1
  • 31
  • 52

2 Answers2

1

This is probably because you need to access the SharedStringTable. And this post shows one way of handling it.

Basically you need to get the string table from the workbook:

SharedStringTablePart sstpart = workbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringTable sst = sstpart.SharedStringTable;

Then check the type of the cell you are looking at and, if necessary, look up the string table id to get the value of the text. Something like:

if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
{
    int ssid = int.Parse(cell.CellValue.Text);
    string str = sst.ChildElements[ssid].InnerText;
    Console.WriteLine("Shared string {0}: {1}", ssid, str);
}
else if (cell.CellValue != null)
{
    Console.WriteLine("Cell contents: {0}", cell.CellValue.Text);
}
shunty
  • 3,699
  • 1
  • 22
  • 27
0

try this:

using (SpreadsheetDocument document = SpreadsheetDocument.Open(INPUT_DIRECTORY, false))
        {
            WorkbookPart wbPart = document.WorkbookPart;

            foreach (Sheet sheet in wbPart.Workbook.Sheets)
            {
                switch (sheet.Name.ToString())
                {
                    case "ABC":

                        WorksheetPart wsPart = (WorksheetPart)wbPart.GetPartById(sheet.Id);
                        SheetData sheetdata = wsPart.Worksheet.Elements<SheetData>().FirstOrDefault();                            

                        foreach (Row r in sheetdata.Elements<Row>())
                        {
                            string xxx = r.Elements<Cell>().ElementAt(0).InlineString.Text.Text;
                            string yyy = r.Elements<Cell>().ElementAt(6).InlineString.Text.Text;
                            string zzz = r.Elements<Cell>().ElementAt(12).InlineString.Text.Text;
                        }                            

                        break;
                }
            }
        }
User11040
  • 208
  • 1
  • 3
  • 12