2013-10-14 1 views

ответ

1

Вы должны быть в состоянии сделать что-то вроде этого (не проверял, возможно, потребуется немного подправили):

using System.Runtime.InteropServices; 
using Microsoft.Office.Interop.Excel; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var application = new Application(); 

      var workbookCopyingFrom = application.Workbooks.Open("a.xlsx"); 
      var workbookCopyingTo = application.Workbooks.Open("b.xlsx"); 

      var worksheetContainingRangeIWantToCopyAcross = workbookCopyingFrom.Sheets[1] as Worksheet; 

      if (worksheetContainingRangeIWantToCopyAcross != null) 
      { 
       var worksheetIWantToCopyToInWorkbookTwo = workbookCopyingTo.Sheets[2] as Worksheet; 

       if (worksheetIWantToCopyToInWorkbookTwo != null) 
       { 
        var usedRangeInWorkbookCopyingTo = worksheetIWantToCopyToInWorkbookTwo.UsedRange; 

        worksheetContainingRangeIWantToCopyAcross.UsedRange.Insert(XlInsertShiftDirection.xlShiftDown, 
                       usedRangeInWorkbookCopyingTo); 

        worksheetIWantToCopyToInWorkbookTwo.Rows.Clear(); 

        worksheetIWantToCopyToInWorkbookTwo.Rows.Insert(
         CopyOrigin: worksheetContainingRangeIWantToCopyAcross); 
       } 
      } 

      workbookCopyingTo.Save(); 
      workbookCopyingTo.Close(); 

      application.Quit(); 

      Marshal.ReleaseComObject(application); 
     } 
    } 
} 
+1

Невозможно заставить это работать, получив сообщение об исключении «Вставить метод класса Range» – furier

2

Предполагая, что вы знаете, как открыть два листа (! См ответ Jmk, если нет) конкретная вещь вы хотите это:

Range src = ... 
Range dest = sheet2.Cells(N+1,1); 

src.Copy(dest); 

Если вы не знаете N заранее вы можете сделать что-то вроде

Range dest = wb2.Sheets["Sheet1"].Range("A1").End(XlDirection.xlDown).Offset(1); 

Предполагая, что первая пустая ячейка в столбце A - это место, куда должны идти данные. (также проверьте, что лист адресата не пуст, или End() переместится прямо к нижней части листа)

+0

Кстати, это должно быть C#, может быть, проще в VBA? –

+0

В идеале, возможно, VBA будет лучшим вариантом. Взаимодействие, до сих пор я нашел очень трудным для работы. Цель - это, возможно, автоматизация некоторых основных задач. – user2531191

 Смежные вопросы

  • Нет связанных вопросов^_^