gpt4 book ai didi

c# - Excel 工作表中不连续的单元格的颜色

转载 作者:太空狗 更新时间:2023-10-29 23:15:51 25 4
gpt4 key购买 nike

是这样的:

enter image description here

xlValues 被设置为 Excel.Range 对象。

我也试过以下方法,都给了我同样的错误:

//xlValueRange = xlSheet...
.get_Range("A1:A5,A15:A25,A50:A65");
.UsedRange.Range["A1:A5,A15:A25,A50:A65"];
.Range["A1:A5,A15:A25,A50:A65"];

xlApp.ActiveWorkbook.ActiveSheet.Range["A1:A5,A15:A25,A50:A65"];
//I have also tried these alternatives with ".Select()" after the brackets and
//", Type.Missing" inside the brackets

//This works though...
xlSheet.Range["A1:A5"];

我正在尝试为 Excel 工作表中的特定单元格重新着色,我找到了使用两个循环的解决方案,但它太慢了。遍历 30 000 个单元格的列需要几分钟。

我以前从未做过这样的事情,我使用了 this教程让我开始。

此解决方案使用 bool 数组,其中要着色的单元格设置为 true。(重新着色)

//using Excel = Microsoft.Office.Interop.Excel;

xlApp = new Excel.Application();
xlApp.Visible = true;
xlBook = xlApp.Workbooks.Add(Type.Missing);
xlSheet = (Excel.Worksheet)xlBook.Sheets[1];

for (int i = 1; i < columns + 1; i++)
{
for (int j = 1; j < rows + 1; j++)
{
if (recolored[j, i])
xlSheet.Cells[j+1, i+1].Interior.Color = Excel.XlRgbColor.rgbRed;
}
}
}

我想做的是这样的:

Excel.XlRgbColor[,] color;
//Loop to fill color with Excel.XlRgbColor.rgbRed at desired cells.

var startCell = (Excel.Range)xlSheet.Cells[1, 1];
var endCell = (Excel.Range)xlSheet.Cells[rows, columns];
var xlRange = xlSheet.Range[startCell, endCell];

xlRange.Interior.Color = color;

虽然这个在最后一行给我一个错误;

类型不匹配。 (HRESULT 异常:0x80020005 (DISP_E_TYPEMISMATCH))


我的第一个猜测是制作一个 Excel.Range 对象来覆盖我想要红色的单元格并使用该对象代替 xlRange,如下所示:

RangeObject.Interior.Color = Excel.XlRgbColor.rgbRed;

虽然我不知道是否可以制作一个具有这样间隙的 Excel.Range 对象,但我可以在这方面寻求一些帮助。

最佳答案

您可以使用逗号分隔的范围列表来选择不连续的单元格,如下所示:

this.Application.ActiveWorkbook.ActiveSheet.Range["A2:A4,B3:B16"].Select();

然后您可以使用以下方法为选区重新着色:

Selection.Interior.Color = ColorTranslator.ToOle(Color.Yellow);

这将摆脱您遇到的着色循环问题。

此外,在 VSTO 加载项中,您通常永远不需要在代码中执行 new Excel.Application()。 Add-in 类中的 this.Application 应该允许您访问 Excel 的事件实例。

更新

这里有一段代码可以帮助您查明问题所在。我在我的加载项中添加了一个功能区,并在功能区中添加了一个简单的按钮。在这个按钮的点击事件后面,我添加了如下代码:

    private void button1_Click(object sender, RibbonControlEventArgs e)
{
try
{
var App = Globals.ThisAddIn.Application;

if (App == null)
System.Windows.Forms.MessageBox.Show("App is null");
else
{
var Sheet = App.ActiveSheet;

if (Sheet == null)
System.Windows.Forms.MessageBox.Show("Sheet is null");
else
{
var Rng = Sheet.Range["A1:A5,A15:A25,A50:A65"];

if (Rng == null)
System.Windows.Forms.MessageBox.Show("Rng is null");
else
{
Rng.Select();
}
}
}
}
catch (Exception ee)
{
System.Windows.Forms.MessageBox.Show("Exception: " + ee.Message);
}
}

在我这边,这段代码成功运行并选择了不连续的单元格区域。在你这边试试这个,让我知道你看到了什么。

更新 2

相同的代码适用于我在 WinForms 应用程序中引用 Excel 14.0(希望也适用于 Excel 12.0)。只需要做一些小的改动。这是完整的代码。

    private void button1_Click(object sender, RibbonControlEventArgs e)
{
try
{
var App = new Microsoft.Office.Interop.Excel.Application();

if (App == null)
System.Windows.Forms.MessageBox.Show("App is null");
else
{
App.Workbooks.Add();

var Sheet = App.ActiveSheet;

if (Sheet == null)
System.Windows.Forms.MessageBox.Show("Sheet is null");
else
{

Microsoft.Office.Interop.Excel.Range Rng = Sheet.get_Range("A1");

Rng.Select();

Rng = Sheet.get_Range("A1:A5,A15:A25,A50:A65");

if (Rng == null)
System.Windows.Forms.MessageBox.Show("Rng is null");
else
{
Rng.Select();

App.Selection.Interior.Color = Microsoft.Office.Interop.Excel.XlRgbColor.rgbYellow;

App.ActiveWorkbook.SaveAs("testtest.xlsx");

App.Quit();
}
}
}
}
catch (Exception ee)
{
System.Windows.Forms.MessageBox.Show("Exception: " + ee.Message);
}
}

关于c# - Excel 工作表中不连续的单元格的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com