Как я могу прочитать значение формулы в ячейке вместо формулы с C#?
Я могу прочитать целевую ячейку, но ячейка использует формулу для вычисления значения. То, что нужно, - это вычисленное значение, а не формула. Как это сделать с помощью C# и OpenXml?
Спасибо.
re is more of the code. public void ReadMyData()//double idx) // idx = xmHt + bf + heavy duty { string fileName = @"c:\cax\resource\bpsys\programs\dose_data.xlsx"; string sheetName = "RFML_DATA"; string addressName = "A1"; double idx = 77.50; int count = 1; string key = ""; string myData = idx.ToString(); try { do { addressName = "A" + count.ToString(); key = GetCellValue(fileName, sheetName, addressName); count++; } while (key != myData); } catch (ArgumentException e) { MessageBox.Show(e.Message); } } // GetCellValue code: // Adapted from "How to: retrieve the values of cells in a spreadsheet document (open xml sdk)" // // Retrieve the value of a cell, given a file name, sheet name, and address name. public static string GetCellValue(string fileName, string sheetName, string addressName) { string value = null; // Open the spreadsheet document for read-only access. using (DOpkg.SpreadsheetDocument document = DOpkg.SpreadsheetDocument.Open(fileName, false)) { // Retrieve a reference to the workbook part. DOpkg.WorkbookPart wbPart = document.WorkbookPart; // Find the sheet with the supplied name, and then use that // Sheet object to retrieve a reference to the first worksheet. DOxls.Sheet theSheet = wbPart.Workbook.Descendants<doxls.sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); // Throw an exception if there is no sheet. if (theSheet == null) { throw new ArgumentException("sheetName"); } // Retrieve a reference to the worksheet part. DOpkg.WorksheetPart wsPart = (DOpkg.WorksheetPart)(wbPart.GetPartById(theSheet.Id)); // Use its Worksheet property to get a reference to the cell // whose address matches the address you supplied. DOxls.Cell theCell = wsPart.Worksheet.Descendants<doxls.cell>().Where(c => c.CellReference == addressName).FirstOrDefault(); // If the cell does not exist, return an empty string. if (theCell != null) { value = theCell.InnerText; // If the cell represents an integer number, you are done. For dates, this code returns the serialized value that // represents the date. The code handles strings and Booleans individually. For shared strings, the code // looks up the corresponding value in the shared string table. For Booleans, the code converts the value into // the words TRUE or FALSE. if (theCell.DataType != null) { switch (theCell.DataType.Value) { case DOxls.CellValues.SharedString: // For shared strings, look up the value in the shared strings table. var stringTable = wbPart.GetPartsOfType<dopkg.sharedstringtablepart>().FirstOrDefault(); // If the shared string table is missing, something is wrong. Return the index that is in // the cell. Otherwise, look up the correct text in the table. if (stringTable != null) { value = stringTable.Share
Что я уже пробовал:
стоимость = перевод.SharedStringTable.ElementAt(int.Parse(value)).Через свойство innerText;
Patrice T
Попробуйте дать контекст (например, попробуйте прочитать значение ячейки в Excel.
Попробуйте привести пример.
попробуйте показать свой код и объяснить проблему.
sonny3g
Спасибо, новичок на этом форуме и еще не знаю всех входов-выходов. Что же касается вопроса, то его решение настолько просто, что мне становится неловко. Мне нужно было использовать " result = thecurrentcell.CellValue.InnerText;" вместо "result = thecurrentcell.Внутренний текст;". Теперь я получаю значение вместо формулы.
Patrice T
Приятно видеть, что она решена.
Если решение 1 Было полезным, примите его, в противном случае добавьте свое собственное решение и примите его.
Принятие решения говорит eceryone, что вопрос решен;
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.