使用Excel公式将工作表保存为CSV完好无损

我正在完全使用VBA for Excel。 我的解决scheme必须完全程序化,而不是用户驱动。 解决scheme的要求是用户启动一个macros来获取工作簿并将这8个工作表保存到单独的CSV文件中,保留公式并丢弃公式解决scheme。 我有一系列的表(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包含文件保存位置的完整path,而且我写了一个布尔函数,用于testing工作簿中是否存在工作表。

问题:

我需要CSV文件来包含Excel公式,而不是公式的评估。 公式的结果可以被丢弃。 微软网站上说:

如果单元格显示公式而不是公式值,则公式将转换为文本。 所有格式,graphics,对象和其他工作表内容都将丢失。 欧元符号将被转换为问号。

这意味着SaveAs函数可能永远不会做我想做的事情,但我需要一些方法来创build文件。 理想情况下,我想保持Excel的能力,以避免CSV单元格。 这些CSV文件将被Java和SQL程序读取,这些程序可以根据需要正确parsingExcel函数。

您可以尝试依次激活每个表格,然后添加

 ActiveWindow.DisplayFormulas = True 

在调用SaveAs之前。

您需要执行类似的操作,将公式导出到csv文件的单元格中,而不是将每个表格保存为CSV,从而将公式

此代码类似于我的答案在生成所有Excel单元格公式的平面列表

对于三张工作簿,它将创build名为的文件

C:\ TEMP \ output1.csv
C:\ TEMP \ output2.csv
C:\ TEMP \ output3.csv

VBA(增加了分隔符的转义)

 Const sFilePath = "C:\temp\output" Const strDelim = "," Sub CreateTxt_Output() Dim ws As Worksheet Dim rng1 As Range Dim X Dim lRow As Long Dim lCol As Long Dim strTmp As String Dim lFnum As Long Dim lngCnt As Long Dim strOut As String lFnum = FreeFile For Each ws In ActiveWorkbook.Worksheets lngCnt = lngCnt + 1 Open (sFilePath & lngCnt & ".csv") For Output As lFnum 'test that sheet has been used Set rng1 = ws.UsedRange If Not rng1 Is Nothing Then 'only multi-cell ranges can be written to a 2D array If rng1.Cells.Count > 1 Then X = ws.UsedRange.Formula For lRow = 1 To UBound(X, 1) strOut = IIf(InStr(X(lRow, 1), strDelim) > 0, """" & X(lRow, 1) & """", X(lRow, 1)) For lCol = 2 To UBound(X, 2) 'write each line to CSV strOut = strOut & (strDelim & IIf(InStr(X(lRow, lCol), strDelim) > 0, """" & X(lRow, lCol) & """", X(lRow, lCol))) Next lCol Print #lFnum, strOut Next lRow Else Print #lFnum, IIf(InStr(rng1.Formula, strDelim) > 0, """" & rng1.Formula & """", rng1.Formula) End If End If Close lFnum Next ws MsgBox "Done!", vbOKOnly End Sub 

或者对于最后的解决scheme,您可以replace文件系统对象和文本stream。 在写入文本文件时检查此链接