У меня есть файл Excel, найденный в этой ссылке, поэтому я хотел бы скопировать строку 22 (выделенную красным) с ее форматом и формулами, затем вставить ее в строку 23, затем скопировать строку 25 (выделенную красным) с помощью это формат и формулы, затем вставьте его в строку 26. При отладке он работает для строки 22, но затем выдает ошибку «Мы не можем сделать это с объединенной ячейкой» в этой строке sourceRange2.Copy(destRange2);
Вот мой код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using System.IO;
using System.Reflection;
using System.Text;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private object missing = Missing.Value;
private void button1_Click(object sender, EventArgs e)
{
Excel.Application myApp = new Excel.Application();
Excel.Workbook my_workbook = myApp.Workbooks.Open(@"C:\Test\myexcel.xlsx");
Excel.Worksheet my_ws = my_workbook.Worksheets[1];
Range range = (Excel.Range)my_ws.Rows[22, this.missing];
range.Insert(Excel.XlDirection.xlDown);
//Source Range
Range sourceRange = my_ws.Range["A22","H22"];
//Destination range
Range destRange = my_ws.Range["A23", "H23"];
sourceRange.Copy(destRange);
Range range2 = (Excel.Range) my_ws.Rows[25, this.missing];
range2.Insert(Excel.XlDirection.xlDown);
//Source Range
Range sourceRange2 = my_ws.Range["A25", "H25"];
//Destination range
Range destRange2 = my_ws.Range["A26", "H26"];
sourceRange2.Copy(destRange2);
my_workbook.Save();
}
}
}
После того, как вы добавили строку в первый раз, вторая красная линия больше не находится в строке 25, она находится в строке 26. Строка 25 теперь является частью вертикально объединенных ячеек, отсюда и ошибка объединенной ячейки. Итак, вторая часть вашего кода должна читать
Range range2 = (Excel.Range) my_ws.Rows[26, this.missing];
range2.Insert(Excel.XlDirection.xlDown);
//Source Range
Range sourceRange2 = my_ws.Range["A26", "H26"];
//Destination range
Range destRange2 = my_ws.Range["A27", "H27"];
sourceRange2.Copy(destRange2);
Также я рекомендую закрыть файл excel, если вы не делаете этого где-то еще, иначе вы получите много открытых экземпляров excel.
my_workbook.Close();