我需要将公式添加到已存在的CSV文件中。使用VB.Net可以做到这一点吗?
我的想法是我已经有了一个CSV文件,我需要在每个单元格中使用自定义公式填充一列。这必须以编程方式完成,因为这些文件是动态创建的。
有谁知道怎么做?感谢。
答案 0 :(得分:24)
1,2,3,= SUM(A1:C1)
当我尝试时让我感到惊讶,但Excel会保留公式。
您甚至可以通过首先在屏幕上显示公式将公式导出为CSV。 (CTRL-`)
答案 1 :(得分:8)
您可以使用逗号分隔值通过文本文件将公式导入excel。请记住确保使用后缀.txt。
命名然后进行导入。
我的示例导入(数据表,来自文本)
列1,列2,ResultColumn
1,2,= A2 + B2
导入并计算得很好
答案 2 :(得分:7)
虽然我坚持认为我的原始答案在技术上是正确的,但我已经得到了很多关于此的信息。显然流行的电子表格软件,如Microsoft Excel,Open Office,Libre Office Calc,将计算输入CSV文件的公式。但是,我仍然不建议依赖此功能。
原始答案:
CSV格式不支持公式。它是纯文本格式。
答案 3 :(得分:3)
您是否正在生成CSV文件?如果是这样,请考虑编写实际的Excel文件。 (我假设您正在导入Excel,因为您使用了术语“单元格”,这在CSV中没有意义。)
以下是有关如何操作的链接:Create Excel (.XLS and .XLSX) file from C#
如果你没有生成CSV,并且你想要的只是添加一个新的计算值(而不是一个随着单元格改变值而动态改变的公式),你可以通过阅读CSV文件,解析每一行足以获得公式所需的值,计算结果,并在将行输出到新文件之前将其(在逗号之后)附加到每一行。
答案 4 :(得分:2)
您可以在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
保存工作簿时,应将公式转换回关闭时的值。
答案 5 :(得分:1)
更具体地说,似乎Excel(我在这里工作的2013年)将导入并评估公式,只要该公式不包含任何逗号即可。其中包括分隔功能参数(例如=IF(A1=C1,D1-A1,D1+A1)
)的逗号。最终将其分为三个单元格,而公式导引器(=)则被视为文本=IF(A1=C1
的一部分。
Excel的另一个怪癖是,如果您有一个完全由数字组成的字符串,则必须将其作为公式表示,以保留前导零。 “ 00012345”导入为12345,忽略引号。要以文本形式导入,.CSV文件必须以=“ 00012345”的形式显示。