Есть ли способ программно вставить формулы в файл csv с помощью vb.net?
Мне нужно добавить формулы в файл CSV, который уже существует. Можно ли это сделать с помощью VB.Net?
Идея заключается в том, что у меня уже есть файл CSV, и мне нужен один столбец, который будет заполняться в каждой ячейке с помощью специальной формулы. Это необходимо сделать программно, потому что эти файлы создаются динамически.
Кто-нибудь знает, как это сделать? Спасибо.
Ответы
Ответ 1
Хотя я и придерживаюсь того, что мой первоначальный ответ технически верен, я получил много отрицательных отзывов об этом. По-видимому, популярное программное обеспечение для работы с электронными таблицами, такое как Microsoft Excel, Open Office, Libre Office Calc, рассчитает формулы, которые вводятся в файл CSV. Однако я не рекомендовал бы полагаться на эту возможность.
Оригинальный ответ:
Формат CSV не поддерживает формулы. Это простой текстовый формат.
Ответ 2
1,2,3, = СУММ (А1: С1)
Удивил меня, когда я попробовал, но Excel сохранит формулу.
Вы даже можете экспортировать формулы в CSV, сначала отображая их на экране.
(CTRL + `)
Ответ 3
Вы можете импортировать формулу в excel через текстовый файл, используя значения, разделенные запятыми. Просто не забудьте убедиться, что он указан с суффиксом .txt.
Затем выполните импорт.
Мой пример импорта (таблица данных, из текста)
Столбец1, Столбец2, ResultColumn
1,2, = A2 + B2
Он импортировал и вычислял только тонкие
Ответ 4
Вы создаете файл CSV? Если да, рассмотрите возможность написания фактического файла Excel. (Я предполагаю, что вы импортируете в Excel, так как вы использовали термин "ячейка", который не имеет смысла в CSV.)
Вот ссылка о том, как это сделать: Создать файл Excel (.XLS и .XLSX) с С#
Если вы не создаете CSV, и если вы хотите добавить новое вычисляемое значение (вместо формулы, которая будет динамически изменяться по мере изменения значений ячеек), вы можете сделать это достаточно легко, прочитав в CSV файл, разбор каждой строки достаточно для получения значений, необходимых для вашей формулы, вычисления результата и добавления его (после запятой) в каждую строку перед записью строки в новый файл.
Ответ 5
Вы можете открыть csv в Excel, а затем добавить формулы в Excel и сохранить обратно в csv. Это можно сделать с помощью библиотеки объектов Microsoft Excel 11.0. Тогда
dim wb as Excel.Workbook
dim exApp as New Excel.Application
dim exSheet as Excel.Worksheet
dim rowNum as integer = 1
wb = System.Runtime.InteropServices.Marshal.BindToMoniker(pathAndFileNameOfCSV)
exApp = wb.Parent
exApp.DisplayAlerts = False
exApp.AlertBeforeOverwriting = False
exSheet = exApp.ActiveWorkbook.Sheets.Item(1)
'do your functions in a loop here i.e.
exSheet.Range("A" & rowNum).Value = "=SUM($A$1:$D$4)"
rowNum += 1
wb.Close (True) 'closes and saves
Сохранение книги должно преобразовать формулы обратно к значениям, когда они закрыты.
Ответ 6
Чтобы быть более конкретным, кажется, Excel (2013, где я работаю) будет импортировать и оценивать формулу, если формула не содержит запятых. Это включает запятые, которые разделяют параметры функции, такие как =IF(A1=C1,D1-A1,D1+A1)
. В результате разделение на три ячейки приводит к тому, что средство ввода формул (=) рассматривается как часть текста =IF(A1=C1
.
Еще одна особенность Excel заключается в том, что если у вас есть строка, состоящая целиком из цифр, вы должны представить ее в виде формулы для сохранения лидирующих нулей. "00012345" импортируется как 12345, игнорируя кавычки. Чтобы импортировать как текст, файл .CSV должен представить это как = "00012345".