使用 C# 在 Excel 中更改 MS Excel 行颜色
Change MS Excel Row Colour in Excel using C#
我目前正在创建一个小程序,允许用户将数据输入到 windows 表单中。一旦将此数据输入到表单中,它将使用 OleDb 添加到 Excel 文档中。
我对上面的部分没有任何问题,我可以毫不费力地输入数据,但是当我尝试更改 Excel 行的颜色时,我的问题就来了。
如果行当前没有填充,我希望将行的颜色更改为红色。
我目前使用的代码:
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(@"C:\Users\jhughes\Desktop\ScreenUpdate.xls");
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["DailyWork"];
Excel.Range usedRange = worksheet.UsedRange;
Excel.Range rows = usedRange.Rows;
try
{
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex = 0)
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
我在 "If(row.Cells.EntireRow....)"
行收到错误 "Cannot implicitly convert type int to bool"
您需要使用 ==
operator instead of =
operator。 ==
运算符用于相等,但 =
运算符用于赋值。
if (row.Cells.EntireRow.Interior.ColorIndex == 0)
=
运算符简单地将右操作数分配给左 variable/property/indexer 和 returns 值作为其结果。这就是为什么当你写
if (row.Cells.EntireRow.Interior.ColorIndex = 0)
等于
if(0)
自 if statement expects boolean expression.
后无法编译
您试图将 ColorIndex
设置为 0
,而不是将其与 0
进行比较。比较时使用==
。
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex == 0) // changed = to ==
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
我认为您没有将保存添加到工作簿并更改 if 条件。不知何故,默认的 colorindex 为 -4142。现在测试可以改变颜色
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(@"C:\Users\MyPath\Desktop\ColorBook.xls");
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["DailyWork"];
Excel.Range usedRange = worksheet.UsedRange;
Excel.Range rows = usedRange.Rows;
try
{
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex == -4142)
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
workbook.Save();
workbook.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
我目前正在创建一个小程序,允许用户将数据输入到 windows 表单中。一旦将此数据输入到表单中,它将使用 OleDb 添加到 Excel 文档中。
我对上面的部分没有任何问题,我可以毫不费力地输入数据,但是当我尝试更改 Excel 行的颜色时,我的问题就来了。
如果行当前没有填充,我希望将行的颜色更改为红色。
我目前使用的代码:
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(@"C:\Users\jhughes\Desktop\ScreenUpdate.xls");
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["DailyWork"];
Excel.Range usedRange = worksheet.UsedRange;
Excel.Range rows = usedRange.Rows;
try
{
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex = 0)
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
我在 "If(row.Cells.EntireRow....)"
行收到错误 "Cannot implicitly convert type int to bool"您需要使用 ==
operator instead of =
operator。 ==
运算符用于相等,但 =
运算符用于赋值。
if (row.Cells.EntireRow.Interior.ColorIndex == 0)
=
运算符简单地将右操作数分配给左 variable/property/indexer 和 returns 值作为其结果。这就是为什么当你写
if (row.Cells.EntireRow.Interior.ColorIndex = 0)
等于
if(0)
自 if statement expects boolean expression.
后无法编译您试图将 ColorIndex
设置为 0
,而不是将其与 0
进行比较。比较时使用==
。
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex == 0) // changed = to ==
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
我认为您没有将保存添加到工作簿并更改 if 条件。不知何故,默认的 colorindex 为 -4142。现在测试可以改变颜色
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(@"C:\Users\MyPath\Desktop\ColorBook.xls");
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["DailyWork"];
Excel.Range usedRange = worksheet.UsedRange;
Excel.Range rows = usedRange.Rows;
try
{
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex == -4142)
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
workbook.Save();
workbook.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}