打开XML:使用列索引删除整个Excel列

我在电子表格中获得了excel列的列索引,并且需要使用此列索引删除整个列。 我只能使用Open XML SDK 2.0。

using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; namespace openXMLDemo { public class Program { public static void Main(string[] args) { string fileFullPath = @"path to the excel file here"; string sheetName = "excelsheet name here"; using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileFullPath, true)) { Sheet sheet = document.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); if (sheet != null) { WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheet.Id.Value); // This is where I am struggling.... // finding the reference to entire column with the use of column index Column columnToDelete = sheet.GetFirstChild<SheetData>().Elements<Column>() } } } } } 

Open XML无法select不幸的列,所以你需要迭代每一行和单元格内的数据来移除数据:

 static void Main(string[] args) { string fileFullPath = @"C:\Book1.xlsx"; string sheetName = "Sheet1"; // Specify your column index and then convert to letter format int columnIndex = 3; string columnName = GetExcelColumnName(columnIndex); using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileFullPath, true)) { Sheet sheet = document.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); if (sheet != null) { WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheet.Id.Value); // Get all the rows in the workbook IEnumerable<Row> rows = worksheetPart.Worksheet.GetFirstChild<SheetData>().Elements<Row>(); // Ensure that there are actually rows in the workbook if (rows.Count() == 0){ return; } // Select all the cells from each row where the column letter is equal to index foreach (Row row in rows) { var cellsToRemove = row.Elements<Cell>().Where(x => new String(x.CellReference.Value.Where(Char.IsLetter).ToArray()) == columnName); foreach (var cell in cellsToRemove) cell.Remove(); } } } } 

助手function提供https://stackoverflow.com/a/182924/5309534

 static string GetExcelColumnName(int columnNumber) { int dividend = columnNumber; string columnName = String.Empty; int modulo; while (dividend > 0) { modulo = (dividend - 1) % 26; columnName = Convert.ToChar(65 + modulo).ToString() + columnName; dividend = (int)((dividend - modulo) / 26); } return columnName; }