当我们需要处理Excel文件时,可以选择使用OpenXml SDK来读写Excel。本文将提供一份简单易懂的OpenXml读写Excel示例代码以及相应的解释。
前置条件
在运行以下代码之前,需要在项目中安装Open XML SDK包,也可以通过NuGet包管理器中,搜索“DocumentFormat.OpenXml”并安装。
示例代码
首先,我们需要引入命名空间:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Linq;
读取数据
public static List<List<string>> ReadExcelData(string filePath)
{
List<List<string>> data = new List<List<string>>();
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filePath, false))
{
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
IEnumerable<Sheet> sheets = workbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheets.First().Id);
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row row in sheetData.Elements<Row>())
{
List<string> rowData = new List<string>();
foreach (Cell cell in row.Elements<Cell>())
{
rowData.Add(GetCellValue(cell, workbookPart));
}
data.Add(rowData);
}
}
return data;
}
private static string GetCellValue(Cell cell, WorkbookPart workbookPart)
{
SharedStringTablePart sharedStringPart = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
string cellValue;
if (cell != null && cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
cellValue = sharedStringPart.SharedStringTable.ElementAt(int.Parse(cell.InnerText)).InnerText;
}
else
{
cellValue = cell?.InnerText ?? string.Empty;
}
return cellValue;
}
以上代码用于读取Excel文件数据,并将其返回为一个包含多个列表的列表,每个内部列表代表一行数据的列表。
写入数据
public static void WriteExcelData(string filePath, List<List<string>> data)
{
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(workbookPart.AddNewPart<WorksheetPart>()), SheetId = 1, Name = "Sheet1" };
sheets.Append(sheet);
WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);
Worksheet worksheet = new Worksheet(new SheetData());
worksheetPart.Worksheet = worksheet;
SheetData sheetData = worksheet.GetFirstChild<SheetData>();
foreach (List<string> rowData in data)
{
Row row = new Row();
foreach (string cellData in rowData)
{
Cell cell = new Cell();
cell.DataType = ResolveCellDataType(cellData);
cell.CellValue = new CellValue(cellData);
row.AppendChild(cell);
}
sheetData.AppendChild(row);
}
workbookPart.Workbook.Save();
}
}
private static CellValues ResolveCellDataType(string data)
{
double result;
if (double.TryParse(data, out result))
{
return CellValues.Number;
}
else
{
return CellValues.String;
}
}
以上代码用于将数据写入Excel文件中。可以看到,在这个函数中,我们创建一个新的工作簿,并将数据写入其中。
示例解释
对于读取Excel数据的操作,我们首先使用创建SpreadsheetDocument对象,传入文件路径以打开要处理的Excel文件。然后,我们获取WorkbookPart和SheetData。接下来,我们迭代所获取的行和单元格,并调用GetCellValue方法以获取每个单元格的值。最后,返回将数据打包成一个二维列表的方法。该返回列表的内部列表包含一行中的所有列数据。
对于写入Excel数据的操作,我们创建SpreadsheetDocument对象,并为要创建的工作表添加一个WorkbookPart。接下来,我们建立Sheet、Sheets和WorksheetPart,使得它们在工作部件中。然后,创建Worksheet,并创建工作表数据行和单元格。最后,将数据写入单元格中。
关于读取Excel数据和写入Excel数据,上述代码涵盖了最常用的操作。这可以为大家提供一个用于处理Excel数据的可读性较高的框架。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:OpenXml读写Excel实例代码 - Python技术站