【发布时间】:2012-03-18 12:02:55
【问题描述】:
我完全在 VBA for Excel 中工作。我的解决方案必须完全是程序化的,而不是用户驱动的。解决方案的要求是用户启动一个宏来获取工作簿并将 8 个工作表保存到单独的 CSV 文件中,保留公式并丢弃公式分辨率。我有一组表(sht),我遍历并保存它们。下面的代码完美地做到了这一点。
For i = LBound(sht) To UBound(sht)
If (SheetExists(csv(i))) Then
Sheets(sht(i)).SaveAs _
fullpath & csv(i) & ".csv", _
FileFormat:=xlCSV, _
CreateBackup:=False
End If
Next i
其中 fullpath 包含文件保存位置的完整路径,我编写了一个布尔函数来测试工作簿中是否存在工作表。
问题:
我需要 CSV 文档来包含 Excel 公式,而不是公式的计算结果。公式的结果可以丢弃。 The Microsoft website 说:
如果单元格显示公式而不是公式值,则公式将转换为文本。所有格式、图形、对象和其他工作表内容都将丢失。欧元符号将转换为问号。
这意味着 SaveAs 函数可能永远不会做我想让它做的事情,但我需要一些方法来创建文件。理想情况下,我也希望保持 Excel 能够完整地转义 CSV 单元格。 CSV 文件将由可以根据需要正确解析 Excel 函数的 Java 和 SQL 程序读取。
【问题讨论】:
-
你将如何处理合并的单元格?如果公式包含换行符怎么办 - 是否应该在导出之前将其删除?你需要处理数组公式吗?
-
您可以在运行 SaveAs 之前尝试激活每个工作表并添加
ActiveWindow.DisplayFormulas = True -
@蒂姆·威廉姆斯。非常聪明。比我的建议好。
-
@TimWilliams 完美。像魅力一样工作。找出规范细节的方法。如果您回复了真正的解决方案,我会将其标记为已接受。
-
此外,几乎所有的公式都是工作表引用,因此没有进行重大处理。没有数组数据,CSV 可以通过用双引号包围单元格来转义包含逗号的单元格,也可以转义嵌入的双引号。
标签: excel csv excel-formula vba