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

问题描述:

我有一个工作表,可以自动更新现场股票价格数据。目前我们有一个非常复杂的解决方案,定期复制到剪贴板并从那里操作数据。有没有办法从Excel自动导出数据?

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

+0

是否通过DDE更新股票价格? – 2011-03-29 22:30:59

+1

我会小心一些依赖于“每个价格”的东西。让自己忙碌的股票或多股股票,突然你的Excel应用程序不断忙碌,对用户输入没有反应。我不能100%确定Excel事件是否能够抓住股票价格更新(我永远不会记得彭博社/路透社是否与Excel平台相当公平)。定期更新是最安全的。 – 2011-03-30 08:30:11

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

我将尽力为您找到具体的文章。

+0

例如,尝试通过ODBC访问Excel:http://www.oraxcel.com/projects/sqlxl/help/techniques/odbc_data_source_administrator/。设置完数据源后,您只需创建一个简单的应用程序/服务即可使用便捷的SQL语言查询xls数据源 – Adi 2011-03-29 21:21:33

我建议以下策略:

  • 火了你的工作表,并切换到“设计模式”
  • 右键单击该更新的股票信息按钮,并尝试找出哪个宏按钮势必
  • 打开VBA编辑器(ALT + F11)
  • 选择 “工作簿” -section
  • 从那里选择 “打开” 事件/法
  • 写与调用上述周期性和编程方式的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秒更新一次。

+0

请注意,这不会“每次检测到价格变化时自动将数据导出到CSV”,而是无论价格如何变化,每(10秒钟+ name_of_macro()'执行时间)。 – 2011-03-30 08:09:45

+0

@ Jean-Francois:的确,我需要更精确一些。我只是想给deltanovember一个指针。 – 2011-03-30 08:14:55

+0

够公平的,我只想让@deltanovember知道 – 2011-03-30 08:25:47

这将这样的伎俩:

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 

您可以使用Application.OnTime建立一个函数被调用定期。

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

Public Sub DoExport() 

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

End Sub