在aspose中选择范围

时间:2013-02-06 10:49:47

标签: c# excel excel-vba aspose-cells vba

您知道VBA代码的等价物吗?

Range(Selection, Selection.End(xlToRight)).Select 

在Aspose.Cells中。似乎只能选择整行中的最后一个单元格:

public Aspose.Cells.Cell EndCellInRow ( Int32 rowIndex )

或范围内右边的最后一个单元格:

public Aspose.Cells.Cell EndCellInRow ( Int32 startRow, Int32 endRow, Int32 startColumn, Int32 endColumn )

但是你必须知道你的桌子会有多大或多或少。

我在2009年发现了这个问题:http://www.aspose.com/community/forums/permalink/196519/196405/showthread.aspx但是这不能解决我的问题,因为我可能在水平和垂直方面都有很多表格。我无法预测他们将会在哪里。

EDIT1: 对不起,如果这是一个愚蠢的问题,但是ctrl + shift + arrow是一个常见的操作,我不敢相信它不会实现,所以我确定我真的必须重新发明轮子。

1 个答案:

答案 0 :(得分:2)

Aspose.Cells使用名为“Worksheet.ListObjects”的属性提供工作表中的表列表。 'ListObjects'是'ListObject'类型的集合,它表示Excel工作表中的表。这意味着如果工作表中有多个表,ListObjects集合将非常方便地访问工作表中的每个表。每个'ListObject'又包含一个名为'DataRange'的属性,它指定表中的所有单元格。为方便起见,DataRange可用于对表执行以下操作:

  1. 在表格
  2. 中的单元格上应用样式/格式
  3. 获取数据值
  4. 合并或移动范围
  5. 中的单元格
  6. 导出内容
  7. 让枚举器遍历表格单元格
  8. 要从DataRange中选择单元格,您可以使用DataRange遍历获取行中的所有单元格(也可以对列进行此操作)

    对表格单元格应用任何操作,例如在使用Ctrl + Shift +箭头选择单元格之后,可以使用工作簿对象执行,如下所示:

    Workbook workbook = new Workbook(new FileStream("book1.xls", FileMode.Open));
    
    if (workbook.Worksheets[0].ListObjects.Count > 0)
    {
         foreach (ListObject table in workbook.Worksheets[0].ListObjects)
         {
              Style st = new Style();
              st.BackgroundColor = System.Drawing.Color.Aqua;
              st.ForegroundColor = System.Drawing.Color.Black;
    
              st.Font.Name = "Agency FB";
              st.Font.Size = 16;
              st.Font.Color = System.Drawing.Color.DarkRed;
    
              StyleFlag stFlag = new StyleFlag();
              stFlag.All = true;
    
              table.DataRange.ApplyStyle(st, stFlag);
         }
    }
    
    workbook.Save("output.xls");
    

    Aspose文档中还提供了一些有关表格样式和applying formatting on a ListObject的有用信息。为了获得某一行或列中的最后一个Table单元格,我相信这会有所帮助:

    int iFirstRowIndex = table.DataRange.FirstRow;
    int iFirstColumnIndex = table.DataRange.FirstColumn;
    
    int iLastRowIndex = table.DataRange.RowCount + iFirstRowIndex;
    int iLastColumnIndex = table.DataRange.ColumnCount + iFirstColumnIndex;
    
    for (int rowIndex = 0; rowIndex < table.DataRange.RowCount; rowIndex++)
    {
         //Get last cell in every row of table
         Cell cell = worksheet.Cells.EndCellInColumn(rowIndex + iFirstRowIndex, rowIndex + iFirstRowIndex, (short)iFirstColumnIndex, (short)(iLastColumnIndex - 1));
    
         //display cell value
         System.Console.WriteLine(cell.Value);
    }