C#, OpenXML, формула IF

298
22 мая 2017, 23:47

Для создания файла Excel использую OpenXML. В файле Excel нужна формула IF(...). Создаю формулу при помощи кода:

new Cell = GetCell("D", 1, worksheetPart);
cell.CellFormula = new CellFormula("=IF(C1<35;10%;15%)");
cell.DataType = new EnumValue<CellValues>(CellValues.String);

где

private static Cell GetCell(string columnName, uint rowIndex, WorksheetPart worksheetPart)
        {
            Worksheet worksheet = worksheetPart.Worksheet;
            SheetData sheetData = worksheet.GetFirstChild<SheetData>();
            string cellReference = columnName + rowIndex;
            // If the worksheet does not contain a row with the specified row index, insert one.
            Row row;
            if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0)
            {
                row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
            }
            else
            {
                row = new Row() { RowIndex = rowIndex };
                sheetData.Append(row);
            }
            // If there is not a cell with the specified column name, insert one.  
            if (row.Elements<Cell>().Where(c => c.CellReference.Value == columnName + rowIndex).Count() > 0)
            {
                return row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).First();
            }
            else
            {
                // Cells must be in sequential order according to CellReference. Determine where to insert the new cell.
                Cell refCell = null; 
                foreach (Cell cell in row.Elements<Cell>())
                {
                    if (cell.CellReference.Value.Length == cellReference.Length)
                    {
                        if (string.Compare(cell.CellReference.Value, cellReference, true) > 0)
                        {
                            refCell = cell;
                            break;
                        }
                    }
                }
                Cell newCell = new Cell() { CellReference = cellReference };
                row.InsertBefore(newCell, refCell);
                worksheet.Save();
                return newCell;
            }
        }

Созданный файл Excel открывается с ошибкой, формула в целевых ячейках отсутствует. Без формулы IF все работает, в частности, формула sum работает прекрасно.

Answer 1
  1. Строки надо заключать в кавычки: @"=IF(C1<35;""10%"";""15%"")".
    Хотя лучше вообще числовую ячейку с процентным форматом использовать.
  2. ; или ,?
  3. DataType разве нужен?
READ ALSO
Конвертирование памяти для видеокарты

Конвертирование памяти для видеокарты

Есть ли более оригинальных способ вывести для каждой видеокарты свой объём памяти?

397
Вывод текст из DataGridView в Label

Вывод текст из DataGridView в Label

Как вывести текст из ячейки DataGridView в Label? Те

453
Поиск клонов по ip

Поиск клонов по ip

Есть таблица с пользователямиЗаписываю в колонку iplast записываю последние входы ip

201
Некоторые пхп скрипты не запускаются на сервере

Некоторые пхп скрипты не запускаются на сервере

Из-за чего такое может быть, что некоторые пхп скрипты не запускаются на сервере? А некоторые нормально работаютЗаливаю в корень доменов,...

228