2017-06-19 62 views
0

我在Excel中创建快照周报(约5-10MB),并正在寻找建立联合周报Excel的转储的本地数据库的最佳方式。 Excel似乎无法合并这些文件,因为它会变得太大而无法在Excel中处理。从每周Excel中创建的Access数据库转储

到目前为止,我已经使用Excel中使用添加计算列和数据透视表每周文件计算的一些重要人物,再使outcoming存储在创建报表另一个Excel文件。但是,我现在无法从所有每周Excel文件创建简单的报告/分析。

如何创建样的每周Excel文件的本地“数据仓库”的?例如。每周将Excel文件添加到包含数据/时间戳的组合数据库中? 任何其他建议也欢迎(也在其他软件方面)。

从这个Access数据库,然后我想一些添加计算表和建立必要的数据,使报告在Excel(或我可以使用PowerBI)。

回答

0

一些策略浮现在脑海中:

  1. 创建Access数据库,并从每个Excel工作表到数据库中添加一个链接表。链接到Excel文件有一些怪癖,所以你可能需要调整导入设置,但是如果你的工作表结构完全一样,那么你只需要做一次。您可以在所有链接表的顶部创建一个UNION ALL查询,并像使用其他任何表/查询一样使用此查询。

  2. 如上所述创建链接表,但将它们用于INSERT到单个Access表(或者到您选择的数据库中的另一个链接表)中。这有更多的移动部分,但它具有持续数据,如果链接在某些时候失败(例如Office升级,文件路径更改等)

  3. 通过ADO在JScript/VBScript中发出直接INSERT INTO dbTable ... SELECT ... FROM excelfile语句。

  4. 加载每个Excel文件到一些数据结构(例如数据表ADO.NET,或2维阵列)或序列化格式(JSON,XML);使用该中间结构/格式导入到您选择的数据库。

0

我会把所有的Excel文件放在一个公共文件夹中,并使用VB导航到该文件夹​​并循环遍历所有文件以导入或链接它们。代码可以从运行时间,文件日期或文件名称中添加时间戳 - 无论您想保留哪些信息。作为帮助开始的一个示例,此功能可导航到文件夹,获取文件列表,检查文件名称以查找条件,然后将选定文件导入到表格中。它还会删除在该进程中创建的任何导入错误文件,因为我知道每个表中都有一行不会导入。

Function Import_Match_Report() 

'On Error Resume Next 

'Get folder & file list 
Dim Source_folder As String 
Source_folder = Get_Folder() 
Dim FSO As New FileSystemObject 
Set flist = FSO.GetFolder(Source_folder).Files 

M = InputBox("update period (01-12)") 

'delete prior data 
CurrentDb().Execute ("delete * from [Matching Report] where period=" & M) 

'Process each file 
SQL = "INSERT INTO [Matching Report] ([period],[account], [reporting unit],[reporting unit title],[amount],[offset unit],[offset unit title],[offset],[variance]) " 
For Each file In flist 
    If (Len(Dir(Source_folder & "\" & file.Name)) = 0) Then GoTo NextFile 
    If file.Size = 0 Then GoTo NextFile 
    Source = file.Name 
    period = Mid(Source, 7, 2) 
    If period <> M Then GoTo NextFile 
    account = Mid(Source, InStr(Source, ".") - 9, 9) 
    CurrentDb().Execute ("delete * from [matching report temp]") 
    DoCmd.TransferText acImportDelim, "match_spec", "matching report temp", Source_folder & "\" & file.Name 
    SQL2 = SQL & " select " & period & ",'" & account & "', F1, F2, F3, F4, F5, F6, F7 from [matching report temp]" 
    CurrentDb.Execute SQL2 
    table = Left(Source, InStr(Source, ".") - 1) 
    If table_exist(table & "_ImportErrors") Then DoCmd.DeleteObject acTable, table & "_ImportErrors" 
NextFile: Next file 

MsgBox ("data import completed") 

End Function 

Public Function Get_Folder() 

'Create a FileDialog object as a Folder Picker dialog box. 
Const msoFileDialogFolderPicker = 4 
Const msoFileDialogFilePicker = 3 
Const msoFileDialogViewDetails = 2 

Set fd = Application.FileDialog(msoFileDialogFolderPicker) 
fd.AllowMultiSelect = False 
fd.ButtonName = "Select" 
fd.InitialView = msoFileDialogViewDetails 
fd.Title = "Select Folder" 
fd.InitialFileName = "MyDocuments\" 
fd.Filters.Clear 

'Show the dialog box and get the file name 
If fd.Show = -1 Then 
    Get_Folder = fd.SelectedItems(1) 
    Else 
    Get_Folder = "MyDocuments\" 
    End If 

Set fd = Nothing 
End Function