C#Excel格式化多个单元格的颜色

你好,我尝试用不同的颜色格式化多个单元格。 所以当列表中有多个对象时,范围会改变。

这是我的代码:

public void writeExcelFile(SPpowerPlant powerPlant, string sqlServer, string database) { //Path to template String tenplate = @"C:\Users\AAN\Documents\Visual Studio 2015\Projects\PowerPlants\Powerplants\bin\Debug\PROJEKTSTATUS_GESAMT_neues_Layout_template.xlsm"; //open Excel (programm) Excel.Application excelApplication = new Excel.Application(); #if DEBUG excelApplication.Visible = true; excelApplication.DisplayAlerts = true; #else excelApplication.Visible = false; excelApplication.DisplayAlerts = false; #endif //Open a Excel File Excel.Workbook excelWorkbook = excelApplication.Workbooks.Add(tenplate); Excel._Worksheet excelSheet = excelWorkbook.ActiveSheet; SPpowerPlantList powerPlantList = loadProjectsAndComponentsFromSqlServer(sqlServer, database, Convert.ToDateTime(powerPlant.timestamp), powerPlant.note); //Lists for the Excel Sheet List<String> projectName = new List<String>(); //1 List<String> phase = new List<String>(); //2 List<String> countryshort = new List<String>(); //3 List<double> projectShareWeb = new List<double>(); //4 List<double> mwWeb = new List<double>(); //5 List<double> projectProgress = new List<double>(); //6 List<double> mwDeveloped = new List<double>(); //7 List<double> yearlyYieldOfWholeProject = new List<double>(); //8 List<double> capexWholeProject = new List<double>(); //9 List<double> equityAmount = new List<double>(); //10 List<double> equityIrr = new List<double>(); //11 List<String> cod = new List<String>(); //12 List<String> projectmanager = new List<string>(); //13 List<String> changes = new List<string>(); //14 List<String> technology = new List<string>(); //15 List<String> countrylong = new List<string>(); //16 List<String> state = new List<string>(); //17 //to get the values into the lists from a powerplant foreach (SPpowerPlant powerPlantItem in powerPlantList) { if (powerPlantItem.phase == "Phase 6") { ////Format the Header row to make it Bold and blue excelSheet.get_Range("B4", "O4").Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); //excelSheet.get_Range("A1", "B1").Font.Bold = true; } projectName.Add(powerPlantItem.projectName); //1 phase.Add(powerPlantItem.phase); //2 countryshort.Add(powerPlantItem.country); //3 projectShareWeb.Add(powerPlantItem.projectShareWeb); //4 mwWeb.Add(powerPlantItem.mwWeb); //5 projectProgress.Add(powerPlantItem.projectProgress); //6 mwDeveloped.Add(powerPlantItem.mwDeveloped); //7 foreach (SPeconomicIndicator economicIndicatoritem in powerPlantItem.economicIndicators) { yearlyYieldOfWholeProject.Add(economicIndicatoritem.yearlyYieldOfWholeProject); //8 capexWholeProject.Add(economicIndicatoritem.capexWholeProject); //9 equityAmount.Add(economicIndicatoritem.equityAmount); //10 equityIrr.Add(economicIndicatoritem.equityIrr); //11 } cod.Add(powerPlantItem.cod.Value.Year.ToString()); //12 projectmanager.Add(powerPlantItem.projectManager); //13 changes.Add("???"); //14 technology.Add(powerPlantItem.technology); //15 countrylong.Add(powerPlantItem.country); //16 state.Add(powerPlantItem.state); //17 } //adding it to the excel sheet int i = 0; for (i = 0; i < powerPlantList.Count; i++) { excelSheet.Cells[i + 4, 2] = projectName[i]; //1 excelSheet.Cells[i + 4, 3] = phase[i]; //2 excelSheet.Cells[i + 4, 4] = countryshort[i]; //3 excelSheet.Cells[i + 4, 5] = projectShareWeb[i]; //4 excelSheet.Cells[i + 4, 6] = mwWeb[i]; //5 excelSheet.Cells[i + 4, 7] = projectProgress[i]; //6 excelSheet.Cells[i + 4, 8] = mwDeveloped[i]; //7 excelSheet.Cells[i + 4, 9] = yearlyYieldOfWholeProject[i]; //8 excelSheet.Cells[i + 4, 10] = capexWholeProject[i]; //9 excelSheet.Cells[i + 4, 11] = equityAmount[i]; //10 excelSheet.Cells[i + 4, 12] = equityIrr[i]; //11 excelSheet.Cells[i + 4, 13] = cod[i]; //12 excelSheet.Cells[i + 4, 14] = projectmanager[i]; //13 excelSheet.Cells[i + 4, 15] = changes[i]; //14; excelSheet.Cells[i + 4, 16] = technology[i]; //15 excelSheet.Cells[i + 4, 17] = countrylong[i]; //16 excelSheet.Cells[i + 4, 18] = state[i]; //17 } //Save the excel workbook under a different name excelWorkbook.SaveAs(@"C:\Users\AAN\Documents\Visual Studio 2015\Projects\PowerPlants\Powerplants\bin\Debug\PROJEKTSTATUS_GESAMT_neues_Layout.xlsm", Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); excelApplication.Quit(); } 

当我尝试它白色单一范围作为expectet工作,但是当有多个对象与阶段6只有在行获取新的颜色。 那么我怎样才能在飞行中改变行? 那么第六阶段的每个价值都会得到我想要的格式?

所以,任何帮助将是伟大的,并感谢您的时间。

你的代码非常冗长,大部分并不涉及你的问题。 将相关的问题作为一个通用的代码示例提取出来会更好,以便其他人可以将代码复制到他们的机器中,然后尝试debugging它们。

主要的问题是,除了最初分配范围B4:O4的时候,你并没有给任何地方的单元格范围分配颜色。 所以每次遇到阶段6时,同一个范围都会被分配颜色,而不是你要填充的行。

你可以尝试一些变化(虽然它有点笨重,可能不符合你正在寻找的确切范围):

  List<string> powerPlantList = new List<string> { "test", "blah", "phase 6", "foo", "bar", "phase 6" }; Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application(); Excel.Visible = true; Workbook wkbk = Excel.Workbooks.Add(); Worksheet sheet = wkbk.ActiveSheet; int initialRow = 4; for (int i = 0; i < powerPlantList.Count; i++) { string s = powerPlantList[i]; string row = (i+ initialRow).ToString(); if (s.Equals("phase 6")) { sheet.get_Range("B" + row, "O"+row).Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); // This is where you assign the color to the current row range } sheet.Cells[i + initialRow, 4] = s; } 

你似乎也过分复杂的parsing每个powerPlantItem的方法。 你最好先制作一个SPowerPlanttypes的列表,然后遍历每个powerPlant直接填充工作表。 您可能不需要创build一系列列表来存储每个powerPlant的属性。