我需要使用带有C#的OpenXML从Excel文件中检索数据,并将其显示在dataGridView中。
我检索了所需的所有值,但我也必须检索该值的文本颜色,以便能够按文件中的原样显示它们。
我在不同的线程中研究了如何更改文本的颜色,并尝试使用相同的方式,但是我找不到一种可以使数据的所有颜色都呈现的方法。
我试图检索单元格的颜色,有时我具有Rgb值,但是在大多数情况下,我只有颜色索引,或者什么也没有。
我试图查看Excel文件的XML文件,但是找不到链接所有内容的方法
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
}
我不知道是否还有另一种方法来获取文本的颜色,我尝试了很多方法,但是找不到一个...
提前感谢您的时间!
答案 0 :(得分:0)
过去对我有用:
int colorNumber = System.Convert.ToInt32(((Range) cell.Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);
答案 1 :(得分:0)
我终于找到了一种方法:
我发现可以通过两种方式找到颜色:直接从RGB十六进制代码或在ColorScheme中找到颜色,具体取决于主题中是否定义了所使用的颜色。
所以首先,我像这样遍历单元格的TableCellProperties:
public async Task<IEnumerable<MyModel>> GetMyModelAsync(IEnumerable<string> input)
{
//await Task.Delay(1);
return await Elastic.Apm.Agent.Tracer
.CurrentTransaction.CaptureSpan("MyQuery", "DB", async (span) =>
{
span.Labels["query"] = MyQuery;
using var _dbConnection = new OracleConnection(connString);
var myModels = await _dbConnection.QueryAsync<MyModel>(MyQuery,
new
{
input
});
return myModels;
}, "my db query");
}
然后我也遍历SolidFill:
foreach(D.TableCellProperties cPr in _cell.Elements<D.TableCellProperties>())
(其中D定义为foreach(D.SolidFill sldFill in cPr.Elements<D.SolidFill>())
)
在此之后,我可以检测SchemeColor或RgbColorHexModel是否不为空。
第一种情况:
如果值using D = DocumentFormat.OpenXml.Drawing;
不为空,我将检索文件配色方案中包含的所有颜色:
sldFill.ShemeColor
然后,我将进行迭代,直到找到相同的颜色名称。之后,我可以使用此参数检索RGB值:
presentationDocument.PresentationPart.ThemePart.Theme.ThemeElements.ColorScheme;
第二种情况:
如果值//colorName represent the color found in the ColorScheme
colorName.Elements<D.RgbColorModelHex>()
不为null,我将像这样检索十六进制代码:
sldFill.RgbColorModelHex