0

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 セルを読み取ることが保証されます
4

1 に答える 1

1

関連するスタイルからではなく、セル範囲から直接色を取得する必要があると思います:

internal int getInteriorColorAt(int row, int col)
{
  return ((Excel.Range)excelRange.Cells[row, col]).Interior.Color;
}

internal int getFontColorAt(int row, int col)
{
  return ((Excel.Range)excelRange.Cells[row, col]).Font.Color;
}
于 2013-08-09T01:19:25.260 に答える