电子表格文档 API 允许您将单元格区域转换为表格。使用表可以更有效地管理工作表数据:对表数据进行排序和筛选、将表绑定到数据源、创建计算列、显示总计行以及在公式中使用表名 您可以将预定义样式或自定义样式应用于表格以更改其外观。
使用 Worksheet.Tables 属性可访问工作表中的表集合。您可以按其索引从集合中获取单个表。
Vb.Net
Using workbook As New DevExpress.Spreadsheet.Workbook()
' 访问表集合
Dim tables As DevExpress.Spreadsheet.TableCollection = workbook.Worksheets(0).Tables
' 访问表集合中第一个表
Dim table1 As DevExpress.Spreadsheet.Table = tables(0)
End Using
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { // 访问表集合 DevExpress.Spreadsheet.TableCollection tables = workbook.Worksheets[0].Tables; // 访问表集合中第一个表 DevExpress.Spreadsheet.Table table1 = tables[0]; } |
以下示例返回“B2:F7”单元格区域的表:
Vb.Net
Using workbook As New DevExpress.Spreadsheet.Workbook()
' 访问表集合
Dim tables As DevExpress.Spreadsheet.TableCollection = workbook.Worksheets(0).Tables
' 访问表集合中第一个表
Dim table1 As DevExpress.Spreadsheet.Table = tables(0)
' 返回“B2:F7”单元格范围中包含的表格。
Dim range As DevExpress.Spreadsheet.CellRange = worksheet.Range("B2:F7")
Dim tablesFromRange As IList(Of DevExpress.Spreadsheet.Table) = tables.GetTables(range)
End Using
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { // 访问表集合 DevExpress.Spreadsheet.TableCollection tables = workbook.Worksheets[0].Tables; // 访问表集合中第一个表 DevExpress.Spreadsheet.Table table1 = tables[0]; //返回“B2:F7”单元格范围中包含的表格。 DevExpress.Spreadsheet.CellRange range = worksheet.Range["B2:F7"]; IList<DevExpress.Spreadsheet.Table> tablesFromRange = tables.GetTables(range); } |
使用 TableCollection.Add 方法将新表添加到工作表中。传递要格式化为表格的单元格区域,并使用 hasHeaders 参数指定此范围的顶行是否包含表标题。
下面的示例创建了一个包含销售数据的简单表。该表包含一个空列,稍后将用于计算每个产品的金额。
视图示例:创建电子表格表格并设置其格式
Vb.Net
Using workbook As New DevExpress.Spreadsheet.Workbook()
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0)
'指定包含表数据的单元格区域。
Dim range As DevExpress.Spreadsheet.CellRange = worksheet("B2:F6")
'插入一个具有默认标题的表。
Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables.Add(range, False)
End Using
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 指定包含表数据的单元格区域。 DevExpress.Spreadsheet.CellRange range = worksheet["B2:F6"]; // 插入一个具有默认标题的表。 DevExpress.Spreadsheet.Table table = worksheet.Tables.Add(range, false); } |
若要指定列标题,请按表的列集合 (Table.Columns) 中的索引访问每列,并设置列的 TableColumn.Name 属性。如果要隐藏标题行,请禁用 Table.ShowHeaders 属性。
以下代码片段指定在上一节中创建的表的列名:
Vb.Net |
Using workbook As New DevExpress.Spreadsheet.Workbook() Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0) '获得第一个表的引用 Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables(0) '获取表列并指定它们的名称。 Dim productColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(0) productColumn.Name = "Product" Dim priceColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(1) priceColumn.Name = "Price" Dim quantityColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(2) quantityColumn.Name = "Quantity" Dim discountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(3) discountColumn.Name = "Discount" Dim amountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(4) amountColumn.Name = "Amount" End Using |
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 获得第一个表的引用 DevExpress.Spreadsheet.Table table = worksheet.Tables[0]; // 获取表列并指定它们的名称。 DevExpress.Spreadsheet.TableColumn productColumn = table.Columns[0]; productColumn.Name = "Product"; DevExpress.Spreadsheet.TableColumn priceColumn = table.Columns[1]; priceColumn.Name = "Price"; DevExpress.Spreadsheet.TableColumn quantityColumn = table.Columns[2]; quantityColumn.Name = "Quantity"; DevExpress.Spreadsheet.TableColumn discountColumn = table.Columns[3]; discountColumn.Name = "Discount"; DevExpress.Spreadsheet.TableColumn amountColumn = table.Columns[4]; amountColumn.Name = "Amount"; } |
将公式分配给 TableColumn.Formula 属性以创建计算列。此公式适用于列中的所有单元格。输入公式时,可以通过表列的名称来引用表列。
以下代码片段指定“Amount”表列的公式:
Vb.Net
Using workbook As New DevExpress.Spreadsheet.Workbook()
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0)
'获得第一个表的引用
Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables(0)
'获取Amount列。
Dim amountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(4)
amountColumn.Name = "Amount"
'指定计算每个产品金额的公式并在“金额”列中显示结果。
amountColumn.Formula = "=[Price]*[Quantity]*(1-[Discount])"
End Using
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 获得第一个表的引用 DevExpress.Spreadsheet.Table table = worksheet.Tables[0]; // 获取Amount列。 DevExpress.Spreadsheet.TableColumn amountColumn = table.Columns[4]; amountColumn.Name = "Amount"; //指定计算每个产品金额的公式并在“金额”列中显示结果。 amountColumn.Formula = "=[Price]*[Quantity]*(1-[Discount])"; } |
使用以下属性可显示表的总计行并计算表列的总计:
财产 | 描述 |
Table.ShowTotals |
指定表合计行是否可见。 |
TableColumn.TotalRowFunction |
指定用于计算列总计的预定义函数。 |
TableColumn.TotalRowFormula |
指定用于计算列总计的公式。 |
TableColumn.TotalRowArrayFormula |
指定用于计算列总计的数组公式。 |
TableColumn.TotalRowLabel |
指定在表列的总单元格中显示的文本。 |
下面的代码片段显示表格的总计行,并计算“金额”列的总金额。
Vb.Net |
Using workbook As New DevExpress.Spreadsheet.Workbook() Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0) '获得第一个表的引用 Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables(0) '获取Discount列。 Dim discountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(3) '获取Amount列。 Dim amountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(4) ' Display the total row for the table. table.ShowTotals = True ' 使用SUM函数计算“金额”列的总值。 discountColumn.TotalRowLabel = "Total" amountColumn.TotalRowFunction = DevExpress.Spreadsheet.TotalRowFunction.Sum End Using |
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 获得第一个表的引用 DevExpress.Spreadsheet.Table table = worksheet.Tables[0]; // 获取Discount列。 DevExpress.Spreadsheet.TableColumn discountColumn = table.Columns[3]; // 获取Amount列。 DevExpress.Spreadsheet.TableColumn amountColumn = table.Columns[4]; // Display the total row for the table. table.ShowTotals = true; // 使用SUM函数计算“金额”列的总值。 discountColumn.TotalRowLabel = "Total"; amountColumn.TotalRowFunction = DevExpress.Spreadsheet.TotalRowFunction.Sum; } |
可以使用以下属性来获取包含表不同部分的单元格区域:
财产 | 描述 |
Table.Range | 指定包含整个表的单元格区域。 |
Table.DataRange |
返回包含表数据的单元格区域。 |
Table.HeaderRowRange |
返回包含表标题行的单元格区域。 |
Table.TotalRowRange |
返回包含表的总行的单元格区域。 |
TableColumn.Range |
返回包含整个表列的单元格区域。 |
TableColumn.DataRange |
返回包含列数据的单元格区域(不含列标题和总单元格)。 |
TableColumn.Total |
返回包含列总计的单元格。 |
Vb.Net |
Using workbook As New DevExpress.Spreadsheet.Workbook() Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0) '获得第一个表的引用 Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables(0) '获取"Price"列. Dim priceColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(1) '获取Discount列。 Dim discountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(3) '获取Amount列。 Dim amountColumn As DevExpress.Spreadsheet.TableColumn = table.Columns(4) '指定每列的数字格式。 priceColumn.DataRange.NumberFormat = "$#,##0.00" discountColumn.DataRange.NumberFormat = "0.0%" amountColumn.Range.NumberFormat = "$#,##0.00;$#,##0.00;"""";@" '指定标题行和总行的水平对齐方式。 table.HeaderRowRange.Alignment.Horizontal = DevExpress.Spreadsheet.SpreadsheetHorizontalAlignment.Center table.TotalRowRange.Alignment.Horizontal = DevExpress.Spreadsheet.SpreadsheetHorizontalAlignment.Center ' 为除第一列外的所有列指定水平对齐方式。 For i As Integer = 1 To table.Columns.Count - 1 table.Columns(i).DataRange.Alignment.Horizontal = DevExpress.Spreadsheet.SpreadsheetHorizontalAlignment.Center Next i ' 设置表格列的宽度。 table.Range.ColumnWidthInCharacters = 10 End Using |
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 获得第一个表的引用 DevExpress.Spreadsheet.Table table = worksheet.Tables[0]; // 获取"Price"列. DevExpress.Spreadsheet.TableColumn priceColumn = table.Columns[1]; // 获取Discount列。 DevExpress.Spreadsheet.TableColumn discountColumn = table.Columns[3]; // 获取Amount列。 DevExpress.Spreadsheet.TableColumn amountColumn = table.Columns[4]; // 指定每列的数字格式。 priceColumn.DataRange.NumberFormat = "$#,##0.00"; discountColumn.DataRange.NumberFormat = "0.0%"; amountColumn.Range.NumberFormat = "$#,##0.00;$#,##0.00;\"\";@"; // 指定标题行和总行的水平对齐方式。 table.HeaderRowRange.Alignment.Horizontal = DevExpress.Spreadsheet.SpreadsheetHorizontalAlignment.Center; table.TotalRowRange.Alignment.Horizontal = DevExpress.Spreadsheet.SpreadsheetHorizontalAlignment.Center; // 为除第一列外的所有列指定水平对齐方式。 for (int i = 1; i <= table.Columns.Count - 1; i++) table.Columns[i].DataRange.Alignment.Horizontal = DevExpress.Spreadsheet.SpreadsheetHorizontalAlignment.Center; // 设置表格列的宽度。 table.Range.ColumnWidthInCharacters = 10; } |
您可以使用表格样式来更改工作表表格的外观。表格样式是一组应用于整个表格的格式设置。使用 Workbook.TableStyles 属性访问工作簿的表格样式集合 (TableStyleCollection)。此集合包含类似于 Microsoft® Excel® 的内置样式,以及不对表应用任何格式的 None 样式。您无法修改或删除内置样式。但是,您可以创建自定义样式或复制现有样式并修改创建的副本。
以下 API 允许您管理表样式集合:
成员 | 描述 |
TableStyleCollection.DefaultStyle |
指定默认表格样式。 |
TableStyleCollection.Item[BuiltInTableStyleId] |
按内置表样式的标识符返回该表样式。 |
TableStyleCollection.Item[String] |
按名称返回表格样式。 |
TableStyleCollection.Add |
创建具有指定名称的新表样式,并将其追加到样式集合中。 |
TableStyle.Duplicate |
创建表格样式的副本。 |
TableStyleCollection.Contains |
指示集合是否包含具有指定名称的表样式。 |
TableStyleCollection.Remove |
从集合中移除具有指定名称的表格样式。 |
若要将内置样式应用于表,请使用样式的标识符 (BuiltInTableStyleId) 从表样式集合中返回相应的 TableStyle 对象,并将此对象分配给 Table.Style 属性。
使用 Table 对象的以下属性来指定表格样式选项:
财产 | 描述 |
Table.ShowTableStyleRowStripes |
为表格行启用备用底纹。 |
Table.ShowTableStyleColumnStripes |
为表列启用备用底纹。 |
Table.ShowTableStyleFirstColumn |
设置表中第一列的格式。 |
Table.ShowTableStyleLastColumn |
设置表中最后一列的格式。 |
下面的示例将 TableStyleDark9
样式应用于表。
Vb.Net |
Using workbook As New DevExpress.Spreadsheet.Workbook() Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0) '获得第一个表的引用 Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables(0) '访问工作簿的表样式集合。 Dim tableStyles As DevExpress.Spreadsheet.TableStyleCollection = workbook.TableStyles '通过Id访问内置表样式。 Dim tableStyle As DevExpress.Spreadsheet.TableStyle = tableStyles(DevExpress.Spreadsheet.BuiltInTableStyleId.TableStyleDark9) ' 将样式应用于表。 table.Style = tableStyle ' 启用表格的带状列格式。 table.ShowTableStyleRowStripes = False table.ShowTableStyleColumnStripes = True End Using |
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 获得第一个表的引用 DevExpress.Spreadsheet.Table table = worksheet.Tables[0]; // 访问工作簿的表样式集合。 DevExpress.Spreadsheet.TableStyleCollection tableStyles = workbook.TableStyles; // 通过Id访问内置表样式。 DevExpress.Spreadsheet.TableStyle tableStyle = tableStyles(DevExpress.Spreadsheet.BuiltInTableStyleId.TableStyleDark9); // 将样式应用于表。 table.Style = tableStyle; // 启用表格的带状列格式。 table.ShowTableStyleRowStripes = false; table.ShowTableStyleColumnStripes = true; } |
调用 TableStyleCollection.Add 方法,将具有指定名称的新表样式添加到 Workbook.TableStyles 集合中。所有表格样式都包括表格样式元素 (TableStyle.TableStyleElements) 的集合。可以通过集合中的单个表样式元素 (TableStyleElement) 的 TableStyleElementType 类型访问该元素。
每个表格样式元素都允许您指定以下格式设置:
成员
描述
TableStyleElement.Borders
指定表格元素单元格的边框。
TableStyleElement.Fill
指定表格元素单元格的填充选项。
TableStyleElement.Font
指定表元素单元格的字体属性。
TableStyleElement.StripeSize
指定在表中显示为奇数和偶数条纹的表行数或列数。此属性仅适用于以下表格样式元素:FirstRow条纹,SecondRow条纹,FirstColumn条纹和SecondColumn条纹.
TableStyleElement.Clear
清除表格样式元素的格式设置。
修改 TableStyle.BeginUpdate 和
TableStyle.EndUpdate 方法调用中的表格样式元素。
下面的代码片段演示了如何创建自定义表格样式。
Vb.Net
Using workbook As New DevExpress.Spreadsheet.Workbook()
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0)
'获得第一个表的引用
Dim table As DevExpress.Spreadsheet.Table = worksheet.Tables(0)
Dim styleName As String = "testTableStyle"
' 如果集合中存在具有指定名称的样式,请将此样式应用于表。
If workbook.TableStyles.Contains(styleName) Then
table.Style = workbook.TableStyles(styleName)
Else
' 将“testTableStyle”名称下的新表样式添加到表样式集合中。
Dim customTableStyle As DevExpress.Spreadsheet.TableStyle = workbook.TableStyles.Add("testTableStyle")
'修改表样式格式。
'为不同的表元素指定格式特征
customTableStyle.BeginUpdate()
Try
customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.WholeTable).Font.Color =Color.FromArgb(107, 107, 107)
'格式化标题行.
Dim headerRowStyle As DevExpress.Spreadsheet.TableStyleElement =customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.HeaderRow)
headerRowStyle.Fill.BackgroundColor = Color.FromArgb(64, 66, 166)
headerRowStyle.Font.Color = Color.White
headerRowStyle.Font.Bold = True
'格式化合计行.
Dim totalRowStyle As DevExpress.Spreadsheet.TableStyleElement =customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.TotalRow)
totalRowStyle.Fill.BackgroundColor = Color.FromArgb(115, 193, 211)
totalRowStyle.Font.Color = Color.White
totalRowStyle.Font.Bold = True
' 指定表格的带状行格式。
Dim secondRowStripeStyle As DevExpress.Spreadsheet.TableStyleElement =customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.SecondRowStripe)
secondRowStripeStyle.Fill.BackgroundColor = Color.FromArgb(234, 234, 234)
secondRowStripeStyle.StripeSize = 1
Finally
customTableStyle.EndUpdate()
End Try
' 将自定义样式应用于表。
table.Style = customTableStyle
End If
End Using
C# |
using (DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook()) { DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 获得第一个表的引用 DevExpress.Spreadsheet.Table table = worksheet.Tables[0]; string styleName = "testTableStyle"; // 如果集合中存在具有指定名称的样式,请将此样式应用于表。 if (workbook.TableStyles.Contains(styleName)) { table.Style = workbook.TableStyles(styleName); } else { // 将“testTableStyle”名称下的新表样式添加到表样式集合中。 DevExpress.Spreadsheet.TableStyle customTableStyle = workbook.TableStyles.Add("testTableStyle"); // 修改表样式格式。 // 为不同的表元素指定格式特征 customTableStyle.BeginUpdate(); try { customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.WholeTable).Font.Color = Color.FromArgb(107, 107, 107); // 格式化标题行. DevExpress.Spreadsheet.TableStyleElement headerRowStyle = customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.HeaderRow); headerRowStyle.Fill.BackgroundColor = Color.FromArgb(64, 66, 166); headerRowStyle.Font.Color = Color.White; headerRowStyle.Font.Bold = true; // 格式化合计行. DevExpress.Spreadsheet.TableStyleElement totalRowStyle = customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.TotalRow); totalRowStyle.Fill.BackgroundColor = Color.FromArgb(115, 193, 211); totalRowStyle.Font.Color = Color.White; totalRowStyle.Font.Bold = true; // 指定表格的带状行格式。 DevExpress.Spreadsheet.TableStyleElement secondRowStripeStyle = customTableStyle.TableStyleElements(DevExpress.Spreadsheet.TableStyleElementType.SecondRowStripe); secondRowStripeStyle.Fill.BackgroundColor = Color.FromArgb(234, 234, 234); secondRowStripeStyle.StripeSize = 1; } finally { customTableStyle.EndUpdate(); } // 将自定义样式应用于表。 table.Style = customTableStyle; } } |