如何通过偏移获取新单元格对象

Range.get(), 似乎只接收正整数

@zengweiyu

在Aspose.Cells中,Range.GetOffset方法用于通过偏移量获取新的单元格范围。该方法接受两个参数:rowOffsetcolumnOffset,这两个参数都是以零为基准的整数,表示相对于当前范围的行和列的偏移量。

如果您希望通过负数偏移量获取新的单元格对象,您可以先获取当前范围的起始行和列,然后手动计算新的行和列索引。例如,您可以使用以下代码示例:

// 实例化一个工作簿对象
Workbook workbook = new Workbook();
// 获取第一个工作表的单元格
Cells cells = workbook.Worksheets[0].Cells;
// 创建一个范围(A1:B3)
Range range = cells.CreateRange("A1:B3");

// 计算新的行和列索引
int newRow = range.FirstRow - 1; // 向上偏移一行
int newColumn = range.FirstColumn - 1; // 向左偏移一列

// 使用计算出的行和列索引获取新的范围
Range newRange = cells.CreateRange(newRow, newColumn, range.RowCount, range.ColumnCount);

在这个示例中,我们首先创建了一个范围,然后通过计算新的行和列索引来获取新的范围。请注意,您需要确保新的索引在有效范围内,以避免超出边界的错误。

如果您有其他问题或需要进一步的帮助,请随时询问!

@zengweiyu,

是的,这是 Aspose.Cells 中的设计。行和列都是从零开始的索引,因此 Range.get(int row, int column) 方法仅接受非负整数。不支持负值。请参阅以下有关如何使用负偏移量获取单元格的示例代码以供参考:

# Load an existing workbook or create a new one
workbook = Workbook()
worksheet = workbook.worksheets[0]
cells = worksheet.cells

# Define a range (e.g., P6:T8)
range_obj = cells.create_range("P6:T8")

# Get the first cell in the range
base_row = range_obj.first_row # Row index of P6 is 5
base_col = range_obj.first_column # Column index of P6 is 15 

# Get a cell by offset (e.g., move 1 row up and 2 columns  (backwards))
# Moves from P6 to N5 
offset_row = 1  
offset_col = 2

row = base_row - offset_row
col = base_col - offset_col
        
# Get the cell
cell = cells.get(row, col)
        
print(cell.name)

# Set value in the cell (this refers to "N5")
cell.put_value("Offset Cell")
        
        
# Save the workbook
workbook.save("e:\\test2\\out1.xlsx")

我希望这会有所帮助。