我有一个excel dokument(制表符分隔)。每次我可以在我的程序中插入excel之前,我需要将客户端列名称映射到我的应用程序中的列名称。
所以在我开始开发一个映射工具之前 - 如果已经存在这样的工具会更好。但是,我不知道我没有找到它。
这个工具实际上会读取一个excel或txt文件,允许我在右边命名新列的所有名称并拖放(例如)。
也许这个工具有一个xml或者我可以定义自定义列的东西,然后它会在右侧显示op。
我希望你知道我的意思,并且有人也需要这个。
谢谢
我想提一些事情作为我的问题的更新,如果它不迟到:我有大约50个标题/列(例如:名字,中间名,街道1,街道2,...)。因此,每当客户端给我他的excel文件(联系人备份)时,我总是需要做的是手动将每个列的数据复制到我的那一列。问题是,每个客户端都有不同的列名,而且客户端的一些列也可以转到我这边的多个列。
所以我认为,如果我找不到解决方案,我会制作一个c ++ / qt应用程序,这需要一个excell并让我分配(拖拽等等)他身边的每一列或更多我的一面。
我还没有做过任何vb编程,所以如果你能更详细地了解如何解决这个问题,那将会很棒。
答案 0 :(得分:2)
第一部分答案:您可以使用简单的vbscript实现它。将此代码复制到vbs扩展文本文件中,然后双击。
Dim oCN As Connection
Dim fs As Scripting.FileSystemObject
Set oCN = New Connection
Set fs = New Scripting.FileSystemObject
sCSVFileName = "C:\Temp\Test1.csv"
sSourceSql = "SELECT field1 as f1, field2 as f2, ... FROM " &
fs.GetFileName(sCSVFileName )
sDestinationTable = "yourAppTable"
With oCN
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties").Value =
"TEXT;HDR=YES;FMT=TabDelimited;MAXSCANROWS=0"
.Open fs.GetFile(sCSVFileName).ParentFolder
End With
sSql = "INSERT INTO [ODBC;DRIVER={SQL Server};Server=" &
ServerName & ";Database=" & DBName & _
IIf(IntegratedSecurity, ";Trusted_Connection=Yes;", _
";UID=" & UID & ";PWD=" & PWD & ";") & _
"]." & sDestinationTable & " " & sSourceSql
oCN.Execute sSql, , adExecuteNoRecords
的更多信息
此外,您可以使用external xml file参数化映射(源表和目标表以及映射字段)。
回答的第二部分:你问其他人是否需要这个,如果这是个好主意。嗯,这是一个非常好的建议。因此,他们是具有此功能的一些解决方案。
首先,这种技术名为ETL。提取 - 转换 - 加载。
每个数据库都有自己的工具
还存在特定技术:
所有这些工具都具有映射列功能。
答案 1 :(得分:1)
我使用通用映射机制,由几个数组配置,你在你的应用程序中使用这些名称(aDsNames),在你的源代码中放入csv文件(aDbNames) 我遍历源代码中的字段,检查getDbName(name)是否在aDsNames中,如果是,则将inserttring中的值写入数据库。 您可以通过两种方式执行此操作,通常我的应用程序向服务器上的databasemodule请求字段,此模块转换为databasename并执行select。 希望这有用.. 干杯
select case store
case "store1Midoc"
aDbNames = array("id" , "beheerder", "datumlijst", "rnr13" , "datvan", "dattot", "opmerking", "status" , "waarde", "kode" , "type")
aDsNames = array("id" , "persnr ", "datum ", "rnr13" , "datvan", "dattot", "opmerking", "status" , "waarde", "kode" , "type")
aTypes = array("number", "string", "date" , "string", "date" , "date" , "string" , "number", "number", "string", "string")
case .....
end select
Function getDbName(dsName)
Dim a
getDbName = "undefined"
If instr(join(aDsNames,","),dsName) Then
For a = 0 to UBound(aDbNames)
If aDsNames(a) = dsName Then
getDbName = aDbNames(a)
End If
Next
End If
End Function