使用 Open XML SDK 2.0 检索每行和每列中的所有单元格值

问题描述 投票:0回答:1

我正在使用 Open XML SDK 打开 Excel 文件,以从工作表中包含数据的所有行和列中检索单元格值。这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace ReadingExcel
{
    class RetrieveListOfExcelValues
    {
        static void Main(string[] args)
        {    
            String fileName = @"C:\Users\Documents\TestReadingExcel.xlsx";
            // Comment one of the following lines to test the method separately.
            ReadExcelFileDOM(fileName);   // DOM
        }  //end Main

        static void ReadExcelFileDOM(string fileName)
        {    
            // Open the spreadsheet document for read-only access.
            using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
            {    
                // Retrieve a reference to the workbook part.
                WorkbookPart wbPart = document.WorkbookPart;
                //Worksheet name that is the the workbook
                string sheetName = "Sheet1";
                // Find the sheet with the supplied name, and then use that
                // Sheet object to retrieve a reference to the first worksheet.
                Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().
                Where(s => s.Name == sheetName).FirstOrDefault();

                // Throw an exception if there is no sheet.
                if (theSheet == null)
                {    
                    throw new ArgumentException("sheetName");
                }

                // Retrieve a reference to the worksheet part.
                WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(theSheet.Id));
                string parseCellValue;
                foreach (Row r in theSheet.Elements<Row>())
                {    
                    foreach (Cell c in r.Elements<Cell>())
                    {    
                        Cell theCell = wsPart.Worksheet.Descendants<Cell>().FirstOrDefault();
                        parseCellValue = GetCellValue(theCell, wbPart);

                        Console.Write(parseCellValue + " ");
                        //text = c.CellValue.Text;
                        //Console.Write(text + " ");
                    }    
                }

                Console.WriteLine();
                Console.ReadKey();
            }    
        }    //end ReadExcelFileDOMMethod

        public static string GetCellValue(Cell cell, WorkbookPart wbPart)
        {    
            string value = null;
            if (cell != null)
            {    
                value = cell.InnerText;

                // If the cell represents an integer number, you are done.
                // For dates, this code returns the serialized value that
                // represents the date. The code handles strings and
                // Booleans individually. For shared strings, the code
                // looks up the corresponding value in the shared string
                // table. For Booleans, the code converts the value into
                // the words TRUE or FALSE.
                if (cell.DataType != null)
                {    
                    switch (cell.DataType.Value)
                    {    
                        case CellValues.SharedString:
                            // For shared strings, look up the value in the
                            // shared strings table.
                            var stringTable = wbPart.GetPartsOfType<SharedStringTablePart>()
                                .FirstOrDefault();

                            // If the shared string table is missing, something
                            // is wrong. Return the index that is in
                            // the cell. Otherwise, look up the correct text in
                            // the table.
                            if (stringTable != null)
                            {    
                                value = stringTable.SharedStringTable.ElementAt(
                                     int.Parse(value)).InnerText;
                            }

                            break;
                        case CellValues.Boolean:
                            switch (value)
                            {    
                                case "0":
                                    value =

                                    "FALSE";
                                    break;
                                default:
                                    value =

                                    "TRUE";
                                    break;
                            }    
                            break;
                    }    
                }    
            }    
            return value;
        }  
    }
}

文本不会显示在控制台上,我无法准确找出我在这段代码中做错了什么。这是我第一次尝试使用 Open XML。我可能忽略了某些东西,或者可能需要移动几行代码。

如何从工作表中的行和列中获取所有单元格值以显示在控制台上?

Excel 格式

A1        B1          C1

Fruit    Lot         Date

Banana      4          4/13/2014

Orange      6          5/01/2014

Apple       9          3/14/2014
c# excel visual-studio-2010 openxml-sdk
1个回答
0
投票

值 = cell.Cellvalue.InnerText;

尝试一下

© www.soinside.com 2019 - 2024. All rights reserved.