代码之家  ›  专栏  ›  技术社区  ›  TPG

OpenXML-InnerText始终是整数而不是字符串

  •  0
  • TPG  · 技术社区  · 6 年前

    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;
                        }
                    }
                }
    

    2 回复  |  直到 6 年前
        1
  •  0
  •   User11040    6 年前

    试试这个:

    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;
                    }
                }
            }
    
        2
  •  0
  •   shunty    6 年前

    这可能是因为您需要访问 SharedStringTable this post 显示一种处理方法。

    基本上,您需要从工作簿中获取字符串表:

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

    然后检查要查看的单元格的类型,如果需要,可以查找字符串表id以获取文本的值。比如:

    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);
    }