Ошибка «Мы не можем сделать это с объединенной ячейкой» в excel С#

У меня есть файл 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();
            
        }
       
    }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 689
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После того, как вы добавили строку в первый раз, вторая красная линия больше не находится в строке 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();

Другие вопросы по теме