Вставить выбранный диапазон из одного файла xls в другой в указанный лист и ячейку - «Ошибка копирования метода класса Range» - PullRequest
0 голосов
/ 10 июля 2020

Я написал код, который работает только с файлами xlsx, если я запускаю его с файлами xls, я получаю «Ошибка метода копирования класса Range». Мне нужно решение, которое будет работать именно с файлами xls.

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

public class Xls: CopyPaste
{
    public override void Run() {
        String srcPath = "C:\\test1.xls";
        Excel.Application xlsSrcApp;
        xlsSrcApp = new Excel.Application();
        Excel.Workbook srcXls = xlsSrcApp.Workbooks.Open(srcPath);
        Excel.Worksheet srcWrks = (Excel.Worksheet)srcXls.Worksheets["Sheet1"];
        Excel.Range srcRange;

        String destPath = "C:\\test2.xls";
        Excel.Application xlsDestApp;
        xlsDestApp = new Excel.Application();
        Excel.Workbook destXls = xlsSrcApp.Workbooks.Open(destPath, 0, false);
        Excel.Worksheet destWrks = (Excel.Worksheet)xlsDestApp.Worksheets["Sheet1"];
        Excel.Range destRange;

        Excel.Range srcRange = srcWrks.Range["A1:B2"];
        Excel.Range destRange = destWrks.Range["A10"];

        srcRange.Copy(destRange);

        destXls.SaveAs(destPath);

        xlsSrcApp.Application.DisplayAlerts = False;
        srcXls.Close(true, null, null);
        xlsSrcApp.Quit();

        xlsDestApp.Application.DisplayAlerts = False;
        destXls.Close(true, null, null);
        xlsDestApp.Quit();
    }
}

1 Ответ

1 голос
/ 10 июля 2020

Я думаю, проблема в том, что вы открываете файлы Excel в двух экземплярах приложения Excel.

Попробуйте, у меня это работает.

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

public class Xls: CopyPaste
{
    public override void Run() {
        string srcPath = "C:\\test1.xls";
        Excel.Application xlsSrcApp;
        xlsSrcApp = new Excel.Application();
        Excel.Workbook srcXls = xlsSrcApp.Workbooks.Open(srcPath);
        Excel.Worksheet srcWrks = (Excel.Worksheet)srcXls.Worksheets["Sheet1"];
        Excel.Range srcRange;

        string destPath = "C:\\test2.xls";
        Excel.Workbook destXls = xlsSrcApp.Workbooks.Open(destPath, 0, false);
        Excel.Worksheet destWrks = (Excel.Worksheet)destXls.Worksheets["Sheet1"];
        Excel.Range destRange;

        srcRange = srcWrks.Range["A1:B2"];
        destRange = destWrks.Range["A10"];

        srcRange.Copy(destRange);

        //No need to do SaveAs you set SaveChanges on Close to true
        //destXls.SaveAs(destPath);

        xlsSrcApp.Application.DisplayAlerts = false;
        srcXls.Close();
        destXls.Close(true);
        xlsSrcApp.Quit();
    }
}
...