我有一个Access数据库,该数据库汇总和格式化从另一个系统导出的人员数据为Excel文件。当前过程要求用户遵循以下步骤/规则:
Alpha_Roster.xls*
或Alpha_Roster.xlsx
,并且与数据库位于同一文件夹中DoCmd.TransferSpreadsheet
如果存在则将失败正如您所看到的,当您只处理几个目标列时,这还不错,但是我们正在从25个左右的列中寻找信息,并且它们与多余的列混合在一起我们需要删除的列(导出的文件中有76列),因此准备文件进行更新是一个相当繁琐的过程,我们必须每周执行一次。
对标题进行排序后,脚本将擦除AlphaList表中的数据,然后使用DoCmd.TransferSpreadsheet acImport, 10, "AlphaList", FilePath & "Alpha_Roster", True
将新数据移入。
因此,我有一些更新目标:
Application.FileDialog(msoFileDialogFilePicker)
和一些If语句删除整个文件名/位置位-完成,以检查我们要插入的扩展名。 现在,这使我明白了为什么要在这里-我正在寻找一种基本上将Excel文件拉入临时记录集或表中的方式,然后可以对其执行SQL查询。不知道我是否能完全摆脱删除顶部两行的问题,但是这样做比消除所有列要好得多。我想我在那儿,但是我正在使用Google搜索的所有内容都比我正在寻找的解决方案要差一点。
这是到目前为止我正在使用的测试代码:
Dim cnn As New ADODB.Connection
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.Title = "Select Alpha Roster File"
.AllowMultiSelect = False
.ButtonName = "Open"
.Filters.Clear
.Filters.Add "Excel Workbook", "*.xls;*.xlsx"
If .Show = True Then
SelFile = .SelectedItems.Item(1)
End If
End With
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & SelFile & ";" & _
"Extended Properties='Excel 12.0 XML;HDR=Yes'"
我不足之处是如何从此处获取可以对其执行更新查询的某种记录集?还是可以从这里运行查询("SELECT " & qryStr & " from ..."
)?还是我在这里完全走错了路?
请注意,由于某种原因或其他原因,无论何时我尝试定义ADODB.Recordset
时,代码检查器都会使Access完全崩溃,因此很遗憾,我无法完全镜像我所见过的一些示例在线。
需要考虑的一些事情-我正尝试在将来做一点证明,因为我不知道可能将哪些字段添加到导出的文件中。这就是为什么我不只是直奔DoCmd.TransferSpreadsheet
。将整个文件转储到一个表中时,最简单的选择是将标头设置为与我们当前所拥有的表相匹配,而第二个方面就标头而言,源文件中的内容发生了变化,过程中断了。另外,尽管我可能精通技术,可以将代码拆开并弄清楚事情的发展方向,但这里的最终用户……好吧,我们只能说他们的技能水平很基本。他们不在乎它是如何工作的。
答案 0 :(得分:1)
您可以使用单行代码将它们作为表格链接为表格:
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12Xml, ...
然后将其用作任何其他表,尽管是只读的。
答案 1 :(得分:1)
您可以使用SheetName $查询工作表。 (美元符号为必填项)
@StepScope
您的列中必须包含带有唯一名称的标题,以免出现问题。