[英]Saving worksheets to CSV with Excel Formulas intact
我完全在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公式,而不是公式評估的公式。 公式的結果可以丟棄。 微軟網站說:
如果單元格顯示公式而不是公式值,則公式將轉換為文本。 所有格式,圖形,對象和其他工作表內容都將丟失。 歐元符號將轉換為問號。
這意味着SaveAs函數可能永遠不會做我想要它做的事情,但我需要一些方法來創建文件。 理想情況下,我希望保持Excel能夠完全逃脫CSV單元格的能力。 Java和SQL程序將讀取CSV文件,可以根據需要正確解析Excel函數。
您需要執行類似這樣的操作,以便按單元格將公式導出到csv文件,而不是將每個工作表另存為CSV,從而剝離公式
此代碼類似於我在生成所有excel單元格公式的平面列表中的答案
對於三張工作簿,它將創建名為的文件
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
作為最后一個解決方案的替代方案,您可以替換filesystemobject和textstream。 寫入文本文件時請檢查此鏈接
您可以嘗試依次激活每個工作表,然后添加
ActiveWindow.DisplayFormulas = True
在調用SaveAs之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.