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

我有一个工作表,自动更新与实时股票价格数据。 目前,我们有一个非常复杂的解决scheme,定期复制到剪贴板并从那里操作数据。

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

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

我会尽力为你find一篇具体的文章。

我build议采取以下策略:

  • 启动您的工作表并切换到“devise模式”
  • 用鼠标右键单击更新股票信息的button,并尝试找出button绑定到哪个macros
  • 打开VBA编辑器(ALT + F11)
  • select“工作簿” – 部分
  • 从那里select“打开”事件/方法
  • 写一个简单的循环延迟,定期调用上述macros,并以编程方式将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 

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

您可以使用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 

这将做的伎俩:

 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