C#Excel教程展示了如何在C#中使用ClosedXMLlibrary处理Excel文件。
Excelxlsx
在本文中,我们使用xlsx文件。xlsx是MicrosoftExcel使用的开放式XML电子表格文件格式的文件扩展名。xlsm文件支持宏。xltm是启用宏的模板文件。xls格式是专有的二进制格式,而xlsx是基于OfficeOpenXML格式。
封闭式XML
ClosedXML是一个用于读取、操作和写入Excel2007+(.xlsx、.xlsm)文件的.NET库。
$ dotnet add package closedxml
我们将包添加到项目中。
C#Excel简单例子
在第一个示例中,我们使用ClosedXML创建一个新的xlsx文件。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.Worksheets.Add("Sheet1");
ws.Cell("A1").Value = "150";
wbook.SaveAs("simple.xlsx");
我们创建一个新的Excel文件并将值写入单元格。
using var wbook = new XLWorkbook();
创建了一个新的XLWorkbook。
var ws = wbook.Worksheets.Add("Sheet1");
我们向工作簿添加一个新工作表。
ws.Cell("A1").Value = "150";
一个值被写入到地址为A1的单元格中。
wbook.SaveAs("simple.xlsx");
工作簿使用SaveAs方法保存。
C#Excel单元格
单元格是行和列的交集。每个单元格都有一个由其列字母和行号组成的唯一地址。例如,位于工作表左上角的第一个单元格的地址为A1。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.AddWorksheet("Sheet1");
ws.FirstCell().Value = 150;
ws.Cell(3, 2).Value = "Hello there!";
ws.Cell("A6").SetValue("falcon").SetActive();
ws.Column(2).AdjustToContents();
wbook.SaveAs("data.xlsx");
在示例中,我们使用单元格。
ws.FirstCell().Value = 150;
FirstCell检索对工作表中第一个单元格的引用。我们使用Value属性将其值设置为150。
ws.Cell(3, 2).Value = "Hello there!";
另一种引用单元格的方法是使用重载的Cell方法,该方法将行号和列号作为参数。
ws.Cell("A6").SetValue("falcon").SetActive();
在这里,我们通过地址(A6)获取单元格,并使用SetValue方法将字符串写入单元格。SetActive方法使单元格处于活动状态。
ws.Column(2).AdjustToContents();
我们根据内容调整第二列的宽度;Hellothere!值完全可见。
C#读取Excel文件
在下一个示例中,我们从先前创建的Excel文件中读取。
using ClosedXML.Excel;
using var wbook = new XLWorkbook("simple.xlsx");
var ws1 = wbook.Worksheet(1);
var data = ws1.Cell("A1").GetValue<string>();
Console.WriteLine(data);
该示例从单元格中读取一个值。
using var wbook = new XLWorkbook("simple.xlsx");
我们打开一个工作簿。
var ws1 = wbook.Worksheet(1);
我们导航到第一个工作表。
var data = ws1.Cell("A1").GetValue<string>();
使用GetValue方法,我们从单元格A1中读取一个值。
C#Excel应用样式
可以通过Style属性应用样式。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.Worksheets.Add("Sheet1");
var c1 = ws.Column("A");
c1.Width = 25;
var c2 = ws.Column("B");
c2.Width = 15;
ws.Cell("A3").Value = "an old falcon";
ws.Cell("B2").Value = "150";
ws.Cell("B5").Value = "Sunny day";
ws.Cell("A3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Cell("A3").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
ws.Cell("A3").Style.Font.Italic = true;
ws.Cell("B2").Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
ws.Cell("B5").Style.Font.FontColor = XLColor.Red;
wbook.SaveAs("styled.xlsx");
在示例中,将样式应用于单元格。
var c1 = ws.Column("A");
c1.Width = 25;
var c2 = ws.Column("B");
c2.Width = 15;
我们设置A和B列的宽度。
ws.Cell("A3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Cell("A3").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
ws.Cell("A3").Style.Font.Italic = true;
在A3单元格中,我们将文本水平和垂直居中并选择草书字体。
ws.Cell("B2").Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
我们为B2单元格设置了细边框。
ws.Cell("B5").Style.Font.FontColor = XLColor.Red;
在单元格B5中,字体颜色设置为红色。
C#Excel范围
范围是一组一个或多个单元格。范围地址由左上单元格地址和下单元格地址指定,以冒号分隔。
使用Range创建单个范围;使用Ranges创建多个范围。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.Worksheets.Add("Sheet1");
ws.Range("D2:E2").Style.Fill.BackgroundColor = XLColor.Gray;
ws.Ranges("C5, F5:G8").Style.Fill.BackgroundColor = XLColor.Gray;
var rand = new Random();
var range = ws.Range("C10:E15");
foreach (var cell in range.Cells())
{
cell.Value = rand.Next();
}
ws.Column("C").AdjustToContents();
ws.Column("D").AdjustToContents();
ws.Column("E").AdjustToContents();
wbook.SaveAs("ranges.xlsx");
在示例中,我们使用范围。
ws.Range("D2:E2").Style.Fill.BackgroundColor = XLColor.Gray;
我们更改D2:E2范围的背景颜色。
ws.Ranges("C5, F5:G8").Style.Fill.BackgroundColor = XLColor.Gray;
在这里,我们更改了两个范围的背景颜色。
var rand = new Random();
var range = ws.Range("C10:E15");
foreach (var cell in range.Cells())
{
cell.Value = rand.Next();
}
在C10:E15范围的每个单元格中,我们设置一个随机值。我们使用Cells方法获取范围内的单元格。
ws.Column("C").AdjustToContents();
我们根据写入的内容调整列C的宽度,使整个值可见。
C#Excel合并单元格
要合并单元格,我们使用Merge方法。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.Worksheets.Add("Sheet1");
ws.Cell("A1").Value = "Sunny day";
ws.Cell("A1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Cell("A1").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
ws.Range("A1:B2").Merge();
wbook.SaveAs("merged.xlsx");
我们将四个单元格合并为一个单元格。
ws.Range("A1:B2").Merge();
我们对包含四个单元格的范围调用Merge方法;A1到B2。
C#Excel排序
可以使用Sort方法对列进行排序。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.Worksheets.Add("Sheet1");
var rand = new Random();
var range = ws.Range("A1:A15");
foreach (var cell in range.Cells())
{
cell.Value = rand.Next(1, 100);
}
ws.Sort("A");
wbook.SaveAs("sorted.xlsx");
我们将十五个随机值添加到A列。然后我们使用Sort对列进行排序。
C#ExcelCellsUsed
CellsUsed方法返回具有值的单元格集合。
using ClosedXML.Excel;
using var wbook = new XLWorkbook();
var ws = wbook.Worksheets.Add("Sheet1");
ws.Cell("A1").Value = "sky";
ws.Cell("A2").Value = "cloud";
ws.Cell("A3").Value = "book";
ws.Cell("A4").Value = "cup";
ws.Cell("A5").Value = "snake";
ws.Cell("A6").Value = "falcon";
ws.Cell("B1").Value = "in";
ws.Cell("B2").Value = "tool";
ws.Cell("B3").Value = "war";
ws.Cell("B4").Value = "snow";
ws.Cell("B5").Value = "tree";
ws.Cell("B6").Value = "ten";
var n = ws.Range("A1:C10").CellsUsed().Count();
Console.WriteLine($"There are {n} words in the range");
Console.WriteLine("The following words have three latin letters:");
var words = ws.Range("A1:C10")
.CellsUsed()
.Select(c => c.Value.ToString())
.Where(c => c?.Length == 3)
.ToList();
words.ForEach(Console.WriteLine);
wbook.SaveAs("usedcells.xlsx");
在示例中,我们将十二个单词写入工作表的两列。
var n = ws.Range("A1:C10").CellsUsed().Count();
Console.WriteLine($"There are {n} words in the range");
我们定义了一个比我们写入的单元格更大的范围。在CellsUsed方法的帮助下,我们获得了所有非空单元格。Count方法计算非空单元格的数量。
var words = ws.Range("A1:C10")
.CellsUsed()
.Select(c => c.Value.ToString())
.Where(c => c?.Length == 3)
.ToList();
在这里我们过滤所有包含三个拉丁字母的单词。
C#Excel表达式求值
使用Evaluate,我们可以计算一个表达式。
using ClosedXML.Excel;
using var wbook = new XLWorkbook("data.xlsx");
var ws = wbook.Worksheet(1);
var sum = ws.Evaluate("SUM(A1:A7)");
var max = ws.Evaluate("MAX(A1:A7)");
Console.WriteLine($"The sum is: {sum}");
Console.WriteLine($"The maximum valus is: {max}");
在示例中,我们在A列中有值。我们对值计算SUM和MAX表达式。
C#Excel公式
使用FormulaA1属性,我们可以在单元格中插入公式。
using ClosedXML.Excel;
using var wbook = new XLWorkbook("data.xlsx");
var ws = wbook.Worksheet(1);
ws.Cell("A8").FormulaA1 = "SUM(A1:A7)";
ws.Cell("A8").Style.Font.Bold = true;
wbook.SaveAs("data2.xlsx");
在示例中,我们在值下方的单元格中插入SUM公式。
在本文中,我们演示了如何使用C#usingClosedXMLlibrary处理Excel文件。
列出所有C#教程。
