C# Excel 互操作快速合并单元格

用户8421235

我想合并单元格并多次执行...我使用此合并的原因是因为我想要更多的一张表。每个表的列数不同,另一个表的列的大小不同......合并的数量和位置未知

    using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp111
{
    class Program
    {
        static void Main(string[] args)
        {
            string x = @"C:\Users\hed-b\source\repos\TESTUserFormFromExcel\ConsoleApp111\bin\Debug\TEST.xltm";

            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application
            {
                DisplayAlerts = false,
                Visible = false,
                ScreenUpdating = false,
            };

            Workbook wb = xlApp.Workbooks.Open(x);
            Worksheet ws = (Worksheet)wb.Worksheets[1];
            if (ws == null)
            {
                Console.WriteLine("Worksheet could not be created. Check that your office installation and project references are correct.");
                return;
            }
            Stopwatch stopWatch = Stopwatch.StartNew();

            for (int i = 2; i <= 10; i++)
            {
                ws.get_Range("A"+i, "B"+i).Merge();

            }
            for (int i = 2; i <= 10; i++)
            {
                ws.get_Range("C" + i, "D" + i).Merge();
            }
            for (int i = 2; i <= 10; i++)
            {
                ws.get_Range("E" + i, "H" + i).Merge();
            }
            Console.WriteLine(stopWatch.ElapsedMilliseconds);

            stopWatch = Stopwatch.StartNew();
            ws.get_Range("A" + 2, "H" + 10).Value2 = new string[10, 5]{
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
                { "aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
            };

            ws.get_Range("A" + 11, "H" + 15).Value2 = new string[5, 8]{
                { "bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb"},
                { "bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb"},
                { "bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb"},
                { "bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb"},
                { "bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb","bbbbb"}
            };

            Console.WriteLine(stopWatch.ElapsedMilliseconds);

            xlApp.ScreenUpdating = true;
            xlApp.Visible = true;
        }
    }
}

我只是在寻找更好的方法来更快地做到这一点

所有这些示例程序合并大约需要 1724 毫秒。在我的实际程序中,我有更多的合并并且花费了超过 5000 毫秒。这合并了它最花时间的东西......

博日达尔·斯托内夫

如果您一次执行合并并让 Excel 处理您需要合并的多个范围,它的性能可能会更好。

即定义一个包含多个区域的范围对象并调用Merge它。它不会将所有内容合并到一个大的脂肪单元中,而是会按照定义合并多个区域:

var ranges = String.Empty();

for (int i = 2; i <= 10; i++)
{
    ranges += $"A{i}:B{i},C{i}:D{i},E{i}:H{i},";
}

ws.get_Range(ranges.TrimEnd(',')).Merge();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查哪些单元格属于合并单元格并使用 c# Excel Interop 获取合并单元格的值?

使用Interop.Excel将C#与Excel单元格合并

C#MVC从数据库导出到excel。合并单元格

如何使用MS Interop Excel在C#中检测合并的单元格

从阵列快速填充Excel单元格

如果单元格合并,Excel重叠

Excel过滤合并的单元格

合并地址中的单元格(Excel)

合并单元格数量的Excel公式?

如何使用互操作将Excel单元格值设置为string.empty?

C#Excel互操作合并不起作用

是否可以使用Excel JS Api合并不同行的单元格,例如A1:C2?

使用 C# 中的 Spire.Office 将 Excel 工作表导出到 Word 维护合并的单元格

使用C#将值写入Excel单元格

使用C#访问Excel单元格

C# Excel 更改单元格类型

使用 C# 在 excel 中的单元格上循环

保护Excel中的某些单元格-C#Epplus

使用C ++从Excel文档复制特定单元格

使用C#将图像插入Excel单元格

如何查找与当前单元格相邻的单元格的值C#+ Excel

C# COM Interop Excel:如何使用 Interop Excel 从 C# 写入单元格?

C#中的“我们无法对合并的单元格执行此操作”错误

Excel Interop - 快速应用单元格颜色

C#阅读使用的Microsoft.Office.Interop.Excel Excel单元格的值

在C#中使用interop.excel检测空白Excel单元格

Excel VBA 一次合并多组单元格

避免在熊猫to_excel方法中合并单元格

excel中合并的单元格在pandas中变为NaN