У меня есть объект Excel.Workbook.Worksheet с N строками данных. У меня есть объект Excel.Range, содержащий M строк из другого листа. Как добавить диапазон в конец рабочего листа?Excel InterOp - Добавление диапазона до конца рабочего листа
ответ
Вы должны быть в состоянии сделать что-то вроде этого (не проверял, возможно, потребуется немного подправили):
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);
}
}
}
Предполагая, что вы знаете, как открыть два листа (! См ответ 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() переместится прямо к нижней части листа)
Кстати, это должно быть C#, может быть, проще в VBA? –
В идеале, возможно, VBA будет лучшим вариантом. Взаимодействие, до сих пор я нашел очень трудным для работы. Цель - это, возможно, автоматизация некоторых основных задач. – user2531191
Невозможно заставить это работать, получив сообщение об исключении «Вставить метод класса Range» – furier