Есть ли способ/способ получить цвет текста значения ячейки?

Мне нужно получить данные из файла Excel с помощью OpenXML с C# и отобразить их в dataGridView.

Я получаю все нужные мне значения, но мне также нужно получить цвет текста этих значений, чтобы иметь возможность отображать их так, как они есть в файле.

Я смотрел в разных темах, как изменить цвет текста, и пытался использовать тот же способ, но не могу найти способ получить все цвета моих данных.

Я пытался получить цвет ячейки, иногда у меня есть значение Rgb, но в большинстве случаев у меня просто есть индекс цвета или ничего.

Я попытался посмотреть в XML-файлах файла Excel, но не смог найти способ связать все

private string GetTextColor(Cell cell, Stylesheet stylesheet)
{
        CellFormats cellFormats = stylesheet.CellFormats;
        DocumentFormat.OpenXml.Spreadsheet.CellFormat cellFormat = cellFormats.Descendants<DocumentFormat.OpenXml.Spreadsheet.CellFormat>().ElementAt(Convert.ToInt32(cell.StyleIndex.Value));
        var textColor = stylesheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Color>().ElementAt(Convert.ToInt32(cellFormat.FillId.Value));
        return textColor.Rgb; //Null most of the case
}

Я не знаю, есть ли другой способ получить цвет текста, я перепробовал много способов, но не могу найти...

Спасибо заранее за ваше время !

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
173
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это работало для меня в прошлом:

int colorNumber = System.Convert.ToInt32(((Range) cell.Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);

Привет ! Спасибо за ваш ответ, это то, что я сделал, но этот способ используется с библиотекой Interop, но он не работает с OpenXML (я хочу использовать OpenXML, потому что он быстрее, чем Interop). Проблема в том, что я не могу иметь каждый цветной текст, когда пытаюсь, иногда у меня есть свойство rgb, но иногда оно пустое, даже если цвет отличается от предыдущей ячейки...

Kaizer80 22.05.2019 12:27
Ответ принят как подходящий

Я наконец нахожу способ сделать это:

Я обнаружил, что цвет можно найти двумя способами: непосредственно из шестнадцатеричного кода RGB или в ColorScheme, в зависимости от того, определен ли используемый цвет в теме.

Итак, сначала я перебираю TableCellProperties ячейки следующим образом:

foreach(D.TableCellProperties cPr in _cell.Elements<D.TableCellProperties>())

а затем я также повторяю SolidFill:

foreach(D.SolidFill sldFill in cPr.Elements<D.SolidFill>())

(Где D определяется как using D = DocumentFormat.OpenXml.Drawing;)

После этого я могу определить, не является ли SchemeColor или RgbColorHexModel нулевым значением.

Первый случай: Если значение sldFill.ShemeColor не равно нулю, я получу все цвета, содержащиеся в цветовой схеме файла:

presentationDocument.PresentationPart.ThemePart.Theme.ThemeElements.ColorScheme;

И я буду повторять, пока не найду то же название цвета. После этого я могу получить значение RGB с помощью этого параметра:

//colorName represent the color found in the ColorScheme
colorName.Elements<D.RgbColorModelHex>()

Второй случай: Если значение sldFill.RgbColorModelHex не равно нулю, я просто получаю шестнадцатеричный код следующим образом:

color = sldFill.RgbColorModelHex.Val;

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