Скопируйте изображение и данные из одного файла Excel в другой файл Excel.

У меня есть файл excel, который содержит изображение в первых пяти строках, а затем начинаются данные. Моя работа состоит в том, чтобы скопировать файл как есть в другой файл Excel. Во-первых, я открываю файл и копирую используемый диапазон. Затем я вставляю содержимое в другой файл Excel.

 lobjCurrentWorkSheet.UsedRange.Copy()

 lobjTargetExcelWorkSheet.PasteSpecial(XlPasteType.xlPasteAll)

Сделав вышесказанное, я мог скопировать только данные, но не изображение? Как мне скопировать файл как есть в другой?

Если я использую опцию SaveAs и если исходный файл зашифрован паролем, то мой целевой файл также будет зашифрован паролем, чего я не хочу.


person Rupesh    schedule 11.06.2012    source источник


Ответы (1)


Я бы никогда не рекомендовал использовать UsedRange

Причина:

Ваши данные могут быть от ячейки A1 до B4, а изображение, скажем, D1. UsedRange в этом случае всегда будет A1:B4, а не A1:F6

введите здесь описание изображения

Если вы хотите, чтобы ваше изображение было скопировано, либо узнайте «Фактический диапазон» рабочего листа, либо укажите диапазон

lobjCurrentWorkSheet.Range("A1:F6").Copy()
lobjTargetExcelWorkSheet.Paste()

EDIT: я пытался заполучить VB.Net, чтобы дать вам точный образец кода. Я наконец сделал :)

См. это (При этом будет скопирован фактический диапазон без необходимости указывать его.)

    Dim shp As Excel.Shape
    Dim lCol As Integer = 0

    '~~> Loop through all shapes and find the last col of the shape
    For Each shp In lobjCurrentWorkSheet.Shapes
        If shp.BottomRightCell.Column > lCol Then _
        lCol = shp.BottomRightCell.Column
    Next

    With lobjCurrentWorkSheet
        '~~> Find actual last Row
        Dim LastRow As Integer = .Cells.Find(What:="*", _
                     After:=.Range("A1"), _
                     LookAt:=Excel.XlLookAt.xlPart, _
                     LookIn:=Excel.XlFindLookIn.xlFormulas, _
                     SearchOrder:=Excel.XlSearchOrder.xlByRows, _
                     SearchDirection:=Excel.XlSearchDirection.xlPrevious, _
                     MatchCase:=False).Row
        '~~> Find actual last column
        Dim LastColumn As Integer = .Cells.Find(What:="*", _
                    After:=.Range("A1"), _
                    LookAt:=Excel.XlLookAt.xlPart, _
                    LookIn:=Excel.XlFindLookIn.xlFormulas, _
                    SearchOrder:=Excel.XlSearchOrder.xlByColumns, _
                    SearchDirection:=Excel.XlSearchDirection.xlPrevious, _
                    MatchCase:=False).Column

        '~~> Check if we have the correct last columnm
        If LastColumn < lCol Then LastColumn = lCol

        .Range("A1:" & Split(.Cells(, LastColumn).Address,
        "$")(1) & LastRow).Copy()
    End With

    '~~> Copies to the current active cell in lobjTargetExcelWorkSheet
    lobjTargetExcelWorkSheet.Paste()
person Siddharth Rout    schedule 11.06.2012
comment
Привет, Сиддхарт. Это было потрясающе..... Это действительно мне очень помогло. Ценю ваши старания и огромное спасибо. - person Rupesh; 11.06.2012
comment
Дайте мне подсказку. Мой файл excel состоит из изображения в этом диапазоне. Теперь копируется все, включая форматы, кроме изображения. Есть идеи? - person Rupesh; 11.06.2012
comment
Почему бы просто не скопировать весь рабочий лист вместо указания активных диапазонов? - person Alistair Weir; 11.06.2012
comment
@AlistairWeir: Потому что, если пользователь хочет добавить данные на второй лист, то выбор всех ячеек на 1-м листе, а затем копирование и вставка, скажем, в ячейку A20 на 2-м листе, приведет к ошибке. - person Siddharth Rout; 11.06.2012