Excelファイルから1行目を読み込み、列ヘッダーとしてDataGridViewに適用したい。その操作中に、前景色と背景色を正しく読み取るという問題が発生しました。
ビュー側
for (var i = 0; i < this.dataGridView1.Columns.Count; ++i)
{
this.dataGridView1.Columns[i].HeaderCell.Style = controller.getHeadingStyle(i);
this.dataGridView1.Columns[i].HeaderCell.Value = controller.getHeadingValue(i);
}
コントローラ側
internal DataGridViewCellStyle getHeadingStyle(int i)
{
var DGVCellStyle = new DataGridViewCellStyle();
var excelStyle = excel.getStyleAt(1, i + 1);
DGVCellStyle.ForeColor = System.Drawing.ColorTranslator.FromOle(Int32.Parse(excelStyle.Font.Color.ToString()));
view.Log(i + " excelStyle.Font.Color: " + excelStyle.Font.Color);
DGVCellStyle.BackColor = System.Drawing.ColorTranslator.FromOle(Int32.Parse(excelStyle.Interior.Color.ToString()));
view.Log(i + " excelStyle.Interior.Color: " + excelStyle.Interior.Color);
view.Log(i + " DGVCellStyle.ForeColor: " + DGVCellStyle.ForeColor);
view.Log(i + " DGVCellStyle.BackColor: " + DGVCellStyle.BackColor);
return DGVCellStyle;
}
internal string getHeadingValue(int i)
{
return excel.getValueAt(1, i + 1);
}
Excel オブジェクト側
internal Microsoft.Office.Interop.Excel.Style getStyleAt(int row, int col)
{
return excelRange.Cells[row, col].Style;
}
public string getValueAt(int row, int col)
{
var val = excelRange.Cells[row, col].Value;
if (val == null)
{
val = "";
}
return val.ToString().Trim();
}
ログ出力
[09/08/2013 11:24:42]: 0 excelStyle.Font.Color: 0
[09/08/2013 11:24:42]: 0 excelStyle.Interior.Color: 16777215
[09/08/2013 11:24:42]: 0 DGVCellStyle.ForeColor: Color [Black]
[09/08/2013 11:24:42]: 0 DGVCellStyle.BackColor: Color [White]
[09/08/2013 11:24:42]: 1 excelStyle.Font.Color: 0
[09/08/2013 11:24:42]: 1 excelStyle.Interior.Color: 16777215
[09/08/2013 11:24:42]: 1 DGVCellStyle.ForeColor: Color [Black]
[09/08/2013 11:24:42]: 1 DGVCellStyle.BackColor: Color [White]
[09/08/2013 11:24:42]: 2 excelStyle.Font.Color: 0
[09/08/2013 11:24:42]: 2 excelStyle.Interior.Color: 16777215
[09/08/2013 11:24:42]: 2 DGVCellStyle.ForeColor: Color [Black]
[09/08/2013 11:24:42]: 2 DGVCellStyle.BackColor: Color [White]
[09/08/2013 11:24:42]: 3 excelStyle.Font.Color: 0
[09/08/2013 11:24:42]: 3 excelStyle.Interior.Color: 16777215
[09/08/2013 11:24:42]: 3 DGVCellStyle.ForeColor: Color [Black]
[09/08/2013 11:24:42]: 3 DGVCellStyle.BackColor: Color [White]
(etc)
問題
- すべてのセルが白地に黒く見えますが、そうではありません
- 同時に値を読み取ると、正しい Excel セルを読み取ることが保証されます