OpenXML меняет цвет искомой ячейки текста - PullRequest
0 голосов
/ 10 октября 2018

Я просмотрел несколько постов, чтобы изменить конкретный цвет текста (ячейки), но не смог этого понять.Есть ли простой способ сделать это?Я просто хочу изменить цвет определенного текста (ячейки) в OpenXML Вот мой код:

    using DocumentFormat.OpenXml;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Spreadsheet;



    private void HighlightDoc()
        {
byte[] byteArray = File.ReadAllBytes(@"C:\TestArea\Destination\SUP000011\ATM-1B4L2KQ0ZE0-0001\TestExcel.xlsx");
        using (MemoryStream ms = new MemoryStream())
        {
            ms.Write(byteArray, 0, (int)byteArray.Length);
            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(ms, true))
              {
           Sheet sheet = doc.WorkbookPart.Workbook.Descendants<Sheet>().First<Sheet>();
          Worksheet worksheet = ((WorksheetPart)doc.WorkbookPart.GetPartById(sheet.Id)).Worksheet;
        IEnumerable<DocumentFormat.OpenXml.Spreadsheet.Row> allRows = worksheet.GetFirstChild<SheetData>().Descendants<DocumentFormat.OpenXml.Spreadsheet.Row>();
     foreach (DocumentFormat.OpenXml.Spreadsheet.Row currentRow in allRows)
      {
                                    IEnumerable<DocumentFormat.OpenXml.Spreadsheet.Cell> allCells = currentRow.Descendants<DocumentFormat.OpenXml.Spreadsheet.Cell>();
    foreach (DocumentFormat.OpenXml.Spreadsheet.Cell currentCell in allCells)
    {
       CellValue currentCellValue = currentCell.GetFirstChild<CellValue>();
       string data = null;
       if (currentCell.DataType != null)
        {
         if (currentCell.DataType == CellValues.SharedString) // cell has a cell value that is a string, thus, stored else where
      {
        data = doc.WorkbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault().SharedStringTable.ElementAt(int.Parse(currentCellValue.Text)).InnerText;
              if (data == "John")
             {
                      //Code to change cell colour
              }
           }
        }
        else
            {
                  data = currentCellValue.Text;


                                        }

                                    }
                                }

                            }
                            // Convert it to byte array 

                            byte[] bytesInStream = ms.ToArray();
                            if (bytesInStream != null)
                            {
                                Response.AppendHeader("content-disposition",
                                        "inline; filename=" + "yourExcelFileName.xlsx");
                                Response.AddHeader("content-length", bytesInStream.Length.ToString());
                                Response.BinaryWrite(bytesInStream);
                                Response.End();
                            }
                        }


                    }
...