【问题标题】:Copying cell range with images in Excel files在 Excel 文件中复制带有图像的单元格范围
【发布时间】:2021-02-16 23:45:48
【问题描述】:

我正在使用GemBox.Spreadsheet 将单元格从一个 Excel 工作表复制到另一个工作表中。单元格来自特定的命名范围,我正在使用 CellRange.CopyTo 方法,如下所示:

ExcelFile book = ExcelFile.Load("sv-data.xlsx");
ExcelWorksheet sheet1 = book.Worksheets[0];
CellRange range1 = sheet1.NamedRanges["SV"].Range;
ExcelWorksheet sheet2 = book.Worksheets.Add("Sheet2");
range1.CopyTo(sheet2, 14, 3);

这适用于所有单元格的值和格式,但它不会复制图像。

这是预期的行为吗?如何同时复制数据和图像?

【问题讨论】:

  • 一个工作表有一个 Shapes 集合。这就是你处理图像的方式。它的工作原理类似于范围,但显然更复杂。这应该会让你走上正轨:ocs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa174305(v=office.11​​)

标签: c# excel named-ranges gembox-spreadsheet


【解决方案1】:

是的,这似乎是有意的,因为图像不存储在单元格内,而是存储在工作表内。它们是单独集合的一部分,ExcelWorksheet.Pictures

所以,也许您可​​以遍历该集合并复制所需的元素。

例如,如下所示:

ExcelFile book = ExcelFile.Load("sv-data.xlsx");
ExcelWorksheet sheet1 = book.Worksheets[0];
CellRange range1 = sheet1.NamedRanges["SV"].Range;

ExcelWorksheet sheet2 = book.Worksheets.Add("Sheet2");

int row2 = 14;
int column2 = 3;
range1.CopyTo(sheet2, row2, column2);

int rowOffset = row2 - range1.FirstRowIndex;
int columnOffset = column2 - range1.FirstColumnIndex;

foreach (ExcelPicture picture1 in sheet1.Pictures)
{
    ExcelDrawingPosition position1 = picture1.Position;
    CellRange pictureRange1 = sheet1.Cells.GetSubrangeAbsolute(position1.From.Row.Index, position1.From.Column.Index, position1.To.Row.Index, position1.To.Column.Index);

    if (range1.Overlaps(pictureRange1))
    {
        ExcelPicture picture2 = sheet2.Pictures.AddCopy(picture1);
        ExcelDrawingPosition position2 = picture2.Position;

        position2.From.Row = sheet2.Rows[position2.From.Row.Index + rowOffset];
        position2.To.Row = sheet2.Rows[position2.To.Row.Index + rowOffset];
        position2.From.Column = sheet2.Columns[position2.From.Column.Index + columnOffset];
        position2.To.Column = sheet2.Columns[position2.To.Column.Index + columnOffset];
    }
}

book.Save("output.xlsx");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多