【发布时间】:2013-06-11 15:42:56
【问题描述】:
我需要将公式添加到已存在的 CSV 文件中。使用 VB.Net 可以做到这一点吗?
我的想法是我已经有一个 CSV 文件,我需要在每个单元格中使用自定义公式填充一列。这必须以编程方式完成,因为这些文件是动态创建的。
有人知道怎么做吗?谢谢。
【问题讨论】:
-
只需使用“=...”符号中的公式数字,Libreoffice 就会很高兴地应用它们
我需要将公式添加到已存在的 CSV 文件中。使用 VB.Net 可以做到这一点吗?
我的想法是我已经有一个 CSV 文件,我需要在每个单元格中使用自定义公式填充一列。这必须以编程方式完成,因为这些文件是动态创建的。
有人知道怎么做吗?谢谢。
【问题讨论】:
1,2,3,=SUM(A1:C1)
当我尝试它时让我感到惊讶,但 Excel 会保留公式。
您甚至可以通过首先在屏幕上显示公式将公式导出为 CSV。 (Ctrl-`)
【讨论】:
虽然我坚持认为我的原始答案在技术上是正确的,但我在这方面得到了很多反对意见。显然流行的电子表格软件,如 Microsoft Excel、Open Office、Libre Office Calc 将计算输入到 CSV 文件中的公式。但是,我仍然不建议依赖此功能。
原答案:
CSV 格式不支持公式。它是纯文本格式。
【讨论】:
您可以使用逗号分隔值通过文本文件将公式导入 Excel。请记住确保它以 .txt 后缀命名。
然后进行导入。
我的示例导入(数据表,来自文本)
Column1,Column2,ResultColumn
1,2,=A2+B2
它导入并计算得很好
【讨论】:
4,3,2,=SUM(A2:C2).
在 Excel 中,要导入带逗号的公式,公式必须用双引号括起来,以防止公式跨单元格传播。例如:
2,4,6,13,=sum(A1:C1),"=if(A1=C1,D1-A1,D1+A1)"
Excel 的另一个怪癖是,如果您有一个完全由数字组成的字符串,则必须将其呈现为公式以保留前导零。 "00012345" 导入为 12345,忽略引号。要以文本形式导入,.CSV 文件必须将其显示为 ="00012345"。
【讨论】:
您是否正在生成 CSV 文件?如果是这样,请考虑编写一个实际的 Excel 文件。 (我假设您正在导入 Excel,因为您使用了“单元格”一词,这在 CSV 中没有任何意义。)
这里有一个链接:Create Excel (.XLS and .XLSX) file from C#
如果您不生成 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
保存工作簿时应将公式转换回关闭时的值。
【讨论】: