Как только вы получите ссылку на объект рабочего листа (после запуска Excel и открытия файла с вашими данными), вы можете использовать элемент Range
, чтобы получить указанную ячейку. Затем вы можете использовать свойство Value2
для получения значения (например, string / double), которое также возвращает результат формулы. Чтобы получить формулу, вы можете использовать Formula
member.
Я не нашел хорошего способа проверить, рассчитывается ли значение автоматически или нет, но вы можете проверить, начинается ли значение Formula
с символа =
. Если вам действительно нужны только простые формулы, которые вы описываете (без скобок и т. Д.), То простое регулярное выражение должно сработать:
let reg = new Regex("=([A-Z]+[0-9]+)([^A-Z0-9]+)([A-Z]+[0-9]+)")
let getInfo (cell:Range) =
let formula = cell.Formula.ToString().Replace(" ", "")
match formula.StartsWith("="), cell.Value2 with
| true, _ ->
let g = reg.Match(formula).Groups
Formula(g.Item(1),g.Item(2),g.Item(3))
| :? float as n -> Float(n)
| :? string as s -> String(s)
| _ -> Empty
Возвращает значение следующего типа данных, которое охватывает все ваши случаи:
type CellInfo =
| Empty
| Float of float
| String of string
| Formula of string * string * string
Кстати: чтобы загрузить Excel в F # Interactive, вам нужно что-то вроде этого:
#r "Microsoft.Office.Interop.Excel.dll"
// Run Excel as a visible application
let app = new ApplicationClass(Visible = true)
// Create new file using the default template
let workbook = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet)
// Get the first worksheet
let worksheet = (workbook.Worksheets.[1] :?> _Worksheet)