Open XML SDK 2.0 to get access to excel 2010 worksheet by name

后端 未结 2 900
野趣味
野趣味 2021-02-05 08:57

I have an Excel 2010 spreadsheet that has 3 worksheets named Sheet1, Sheet2 and Sheet3.

I\'m trying to get a reference to a worksheet by name.

I\'m using the co

2条回答
  •  故里飘歌
    2021-02-05 09:29

    Here is some code to process a spreadsheet with a specific tab or sheet name and dump it to something like CSV. (I chose a pipe instead of comma).

    I wish it was easier to get the value from a cell, but I think this is what we are stuck with. You can see that I reference the MSDN documents where I got most of this code. That is what Microsoft recommends.

        /// 
        /// Got code from: https://msdn.microsoft.com/en-us/library/office/gg575571.aspx
        /// 
        [Test]
        public void WriteOutExcelFile()
        {
            var fileName = "ExcelFiles\\File_With_Many_Tabs.xlsx";
            var sheetName = "Submission Form"; // Existing tab name.
            using (var document = SpreadsheetDocument.Open(fileName, isEditable: false))
            {
                var workbookPart = document.WorkbookPart;
                var sheet = workbookPart.Workbook.Descendants().FirstOrDefault(s => s.Name == sheetName);
                var worksheetPart = (WorksheetPart)(workbookPart.GetPartById(sheet.Id));
                var sheetData = worksheetPart.Worksheet.Elements().First();
    
                foreach (var row in sheetData.Elements())
                {
                    foreach (var cell in row.Elements())
                    {
                        Console.Write("|" + GetCellValue(cell, workbookPart));
                    }
                    Console.Write("\n");
                }
            }
        }
    
        /// 
        /// Got code from: https://msdn.microsoft.com/en-us/library/office/hh298534.aspx
        /// 
        /// 
        /// 
        /// 
        private string GetCellValue(Cell cell, WorkbookPart workbookPart)
        {
            if (cell == null)
            {
                return null;
            }
    
            var value = cell.CellFormula != null
                ? cell.CellValue.InnerText 
                : cell.InnerText.Trim();
    
            // 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)
            {
                return value;
            }
            switch (cell.DataType.Value)
            {
                case CellValues.SharedString:
    
                    // For shared strings, look up the value in the
                    // shared strings table.
                    var stringTable =
                        workbookPart.GetPartsOfType()
                            .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;
        }
    

提交回复
热议问题