C # Excel: проблема при копировании листа из другой книги - PullRequest
0 голосов
/ 16 января 2019

В настоящее время я пытаюсь скопировать лист из другой книги, что мне удается, используя Copy () и PasteSpecial (). Однако я хотел бы знать, почему следующий код не работает, хотя многие решения в Интернете, похоже, используют этот подход.

Workbook currBook = Globals.ThisAddIn.GetActiveWorkbook();
Workbook copyBook = Globals.ThisAddIn.OpenWorkbook(Globals.ThisAddIn.Application.ActiveWorkbook.Path + @"\copyFile.xlsm", true, true);

//required worksheet
Worksheet copySheet = Globals.ThisAddIn.GetWorksheet(copyBook, "ToCopy");
copySheet.Copy(currBook.Worksheets[1]);

//close workbook
copyBook.Close();

Функция, используемая для получения конкретного листа:

public Excel.Worksheet GetWorksheet(Excel.Workbook book, string sheetName, bool create = false)
{
    foreach (Excel.Worksheet sheet in book.Worksheets)
    {
        //worksheet with name found
        if (sheet.Name == sheetName)
        {
            sheet.Activate();
            return sheet;
        }
    }

    //worksheet can't be found
    if (create)
    {
        Excel.Worksheet sheet = book.Worksheets.Add();
        sheet.Name = sheetName;
        sheet.Activate();
        return sheet;
    }

    return null;
}

В указанном коде нет ошибок, и лист проверен на наличие. Программа просто не создает копию в currBook

1 Ответ

0 голосов
/ 16 января 2019

Интересно, я просто работал над чем-то еще, где это возникло ...

Чтобы указать пункт назначения, необходимо использовать Range.Copy, а не Sheet.Copy:

copySheet.UsedRange.Copy(currBook.Worksheets[1].Range["A1"]); 

Если пункт назначения не может быть указан, то Excel помещает данные в новую рабочую книгу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...