2015-07-22 3 views
1

В настоящее время я создаю небольшую программу, которая позволит пользователю вводить данные в форму окна. Как только эти данные будут введены в форму, они будут добавлены в документ Excel с использованием OleDb.Изменение цвета строки Excel Excel в Excel с помощью C#

У меня нет проблем с вышеуказанным разделом, и я могу вводить данные, не беспокоясь, однако моя проблема возникает, когда я пытаюсь изменить цвет строки 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()); 
     } 

Я получаю сообщение об ошибке «Не удается неявно преобразовать тип Int к BOOL» на линии «Если (row.Cells.EntireRow ....)»

ответ

1

Я думаю, что вы не добавили сохранение в книгу и измените, если состояние. Как-то цветной указатель по умолчанию идет как -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()); 
       } 
+0

Работал! Огромное спасибо за помощь :) –

3

Вам необходимо использовать == operator вместо = operator. == оператор для равенства, но = оператор для назначения.

if (row.Cells.EntireRow.Interior.ColorIndex == 0) 

= операторы просто присвоить правый операнд в левой переменной/свойства/индексатор и возвращает значение в качестве результата. Вот почему, когда вы пишете

if (row.Cells.EntireRow.Interior.ColorIndex = 0) 

равна

if(0) 

, который не будет компилироваться, так как if statement ожидает boolean expression.

4

Вы пытаетесь установить 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; 
    } 
} 
+0

Yea ... Из всех мелких ошибок, которые меня достали. Это удалило ошибку, однако никакие строки в моей таблице не преобразуются в красный цвет. –

+1

Прошу прощения - я отвечал больше на C# -условие сообщения - у меня нет особого опыта. Есть ли какой-либо метод, чтобы свернуть ваши изменения обратно в форму? Что-то вроде «OnPropertyChanged» из технологии WPF? +1 для видимости. –

+0

Я рассмотрю OnPropertyChanged спасибо за помощь –

Смежные вопросы