我需要将公式添加到已经存在的 CSV 文件中。使用 VB.Net 可以做到这一点吗?
我的想法是我已经有一个 CSV 文件,我需要在每个单元格中使用自定义公式填充一列。这必须以编程方式完成,因为这些文件是动态创建的。
有谁知道如何做到这一点?谢谢。
1,2,3,=总和(A1:C1)
当我尝试它时让我感到惊讶,但 Excel 会保留公式。
您甚至可以通过首先在屏幕上显示公式将公式导出为 CSV。(Ctrl-`)
虽然我坚持认为我的原始答案在技术上是正确的,但我一直对此表示反对。显然,流行的电子表格软件,如 Microsoft Excel、Open Office、Libre Office Calc 将计算输入到 CSV 文件中的公式。但是,我仍然不建议依赖此功能。
原始答案:
CSV 格式不支持公式。它是纯文本格式。
您可以使用逗号分隔值通过文本文件将公式导入 excel。只需记住确保它以 .txt 后缀命名。
然后进行导入。
我的示例导入(数据表,来自文本)
第 1 列、第 2 列、结果列
1,2,=A2+B2
它导入并计算得很好
您是否正在生成 CSV 文件?如果是这样,请考虑编写一个实际的 Excel 文件。(我假设您正在导入 Excel,因为您使用了“单元格”一词,这在 CSV 中没有任何意义。)
这是有关如何执行此操作的链接: 从 C# 创建 Excel (.XLS 和 .XLSX) 文件
如果您没有生成 CSV,并且您只想添加一个新的计算值(而不是随着单元格更改值而动态更改的公式),您可以通过读取 CSV 文件轻松完成此操作,解析每一行以获得公式所需的值,计算结果,并将其(在逗号之后)附加到每一行,然后再将行写入新文件。
您可以在 Excel 中打开 csv,然后将公式添加到 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
保存工作簿应将公式转换回关闭时的值。
在 Excel 中,要使用逗号导入公式,公式必须用双引号括起来,以防止公式跨单元格传播。例如:
2,4,6,13,=sum(A1:C1),"=if(A1=C1,D1-A1,D1+A1)"
Excel 的另一个怪癖是,如果您有一个完全由数字组成的字符串,则必须将其呈现为公式以保留前导零。"00012345" 导入为 12345,忽略引号。要作为文本导入,.CSV 文件必须将其显示为 ="00012345"。