有没有办法从Excel自动导出数据?

时间:2011-03-29 21:15:15

标签: excel

我有一个工作表,可以使用实时股票价格数据自动更新。目前我们有一个非常混乱的解决方案,定期复制到剪贴板并从那里操纵数据。

每次检测到价格变化时,是否可以自动将数据导出为CSV?我猜它会涉及VBA。

4 个答案:

答案 0 :(得分:1)

您可以将excel文件视为数据源,您可以查询它。 请参阅Google搜索结果:http://www.google.ro/#sclient=psy&hl=ro&q=excel+data+source+sql+query&aq=0&aqi=g1&aql=&oq=&pbx=1&fp=b0efac6ab816e29b

我会尝试为您找到一篇特定的文章。

答案 1 :(得分:0)

我建议采用以下策略:

  • 启动工作表并切换到“设计模式”
  • 右键单击更新股票信息的按钮,并尝试找出按钮绑定到哪个宏
  • 打开VBA编辑器(ALT + F11)
  • 选择“工作簿” - 章节
  • 从那里选择“打开”事件/方法
  • 编写一个带有延迟的简单循环,定期调用上面提到的宏并以编程方式将excel表保存为CSV

代码会像这样(不能检查它,因为我现在无法访问excel):

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub Workbook_open()
  Do While True

    Call name_of_macro()
    ActiveWorkbook.SaveAs Filename:= _
    "c:\path/to/file.csv", FileFormat:=xlCSV _
    , CreateBackup:=False
    Sleep 10000 'Sleep 10 seconds

  Loop
End Sub

这个例子只是为了显示一个粗略的解决方案。正如Jean-Francois指出的那样,每次检测到更改时,这段代码都不会更新,即使数据仍然相同,它也会每10秒更新一次。

答案 2 :(得分:0)

这样可以解决问题:

Sub LoadNewValuesAndCheckForChange()

    Dim rngMyValues As Range
    Dim varBefore As Variant
    Dim varAfter As Variant
    Dim iRow As Long
    Dim iCol As Long
    Dim booValuesHaveChanged As Boolean

    Set rngMyValues = Range("B4:D9") ' Or wherever your data is

    varBefore = rngMyValues ' Save old values in an array

    ' Call the function that loads your new stock prices here...

    varAfter = rngMyValues ' Get new values

    ' Loop through all cells to see if anything has changed.
    booValuesHaveChanged = False
    For iRow = LBound(varBefore, 1) To UBound(varBefore, 1)
        For iCol = LBound(varBefore, 21) To UBound(varBefore, 21)
            If Not varAfter(iRow, iCol) = varBefore(iRow, iCol) Then
                ' Change detected!
                booValuesHaveChanged = True
            End If
        Next iCol
    Next iRow

    If booValuesHaveChanged Then
        ' Save .csv file with timestamp in filename
        ActiveWorksheet.SaveAs _
            Filename:="c:\myfile" & Format(Now, "yyyymmddhhnnss") & ".csv", _
            FileFormat:=xlCSV
    End If

End Sub

答案 3 :(得分:0)

您可以使用Application.OnTime来设置定期调用的函数。

Excel每隔30秒调用以下函数。可以调用一次来启动计划,也可以在工作表打开时将Application.OnTime设置为一次以使其运行。

Public Sub DoExport()

    ' do your export to CSV logic here
    Application.OnTime Now + TimeValue("00:00:30"), "DoExport"

End Sub