Previous topicNext topic
Help > 开发指南 > Excel > API > 主要对象 >
Table表

电子表格文档 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];
}

还可以使用 TableCollection.GetTables 方法返回占用或与特定单元格区域相交的表。

以下示例返回“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;
    }
}