2012-06-11 5 views
1

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

lobjCurrentWorkSheet.UsedRange.Copy() 

lobjTargetExcelWorkSheet.PasteSpecial(XlPasteType.xlPasteAll) 

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

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

ответ

2

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

Причина:

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

enter image description here

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

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() 
+0

Привет Сиддхарт Это был фантастический ..... Это действительно помогло мне много. Цените свои усилия и благодарность. – Rupesh

+0

Дайте мне подсказку. Мой файл excel состоит из изображения в этом диапазоне. Теперь все, включая фоматы, копируется, кроме изображения. Есть идеи? – Rupesh

+0

Почему бы просто не скопировать весь рабочий лист вместо указания активных диапазонов? –