Мне нужно быстро поменять ячейки Excel. Я нашел аналогичный метод для записи в ячейки Excel, который для меня очень быстрый, поэтому я попытался применить тот же метод при окрашивании ячеек. Рассмотрим следующий код:Экранная клавиатура Excel Interop, использующая диапазон
xlRange = xlWorksheet.Range["A6", "AS" + dtSchedule.Rows.Count];
double[,] colorData = new double[dtSchedule.Rows.Count, dtSchedule.Columns.Count];
for (var row = 0; row < dtSchedule.Rows.Count; row++)
{
for (var column = 0; column < dtSchedule.Columns.Count; column++)
{
if (column <= 3)
{
colorData[row, column] = GetLightColor2("#ffffff");
continue;
}
if (dtSchedule.Rows[row][column].ToString() != "#000000" && !string.IsNullOrEmpty(dtSchedule.Rows[row][column].ToString()))
{
string[] schedule = dtSchedule.Rows[row][column].ToString().Split('/');
string color = schedule[0].Trim();
colorData[row, column] = GetLightColor2(color);
continue;
}
colorData[row, column] = GetLightColor2("#000000");
}
}
xlRange.Interior.Color = colorData;
Это функция GetLightColor2:
private double GetLightColor2(string hex)
{
return ColorTranslator.ToOle(ColorTranslator.FromHtml(hex));
}
Когда я запускал код, ошибка была брошена
xlRange.Interior.Color = colorData;
со следующей ошибкой:
System.Runtime.InteropServices.COMException (0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Interior.set_Color(Object value)
I coul d не найти никакого другого обходного пути, если не окрашивать ячейку, перейдя через каждую ячейку, которая действительно медленная. Или это то, что я делаю это неправильно.
Благодарим вас за внимание.
Попробуйте использовать ClosedXML его проще, чем Interop, Эта ссылка может помочь https://closedxml.codeplex.com/wikipage?title=Selecting%20Columns&referringTitle=Documentation –
подписаться на советы Akhil R Джея. У Interop есть много недостатков, включая проблемы с производительностью и резидентные процессы после работы с ним. Не рекомендуется использовать его на стороне сервера. – Alexei
Я не думаю, что есть способ, а не как трюк с настройкой значений с помощью double [,] - попробуйте записать макрос excel, чтобы увидеть метод, используемый VBA при окрашивании диапазона ячеек и преобразовании его в C# –