用于txt或excel的自定义映射工具

时间:2011-11-24 07:56:26

标签: excel etl

我有一个excel dokument(制表符分隔)。每次我可以在我的程序中插入excel之前,我需要将客户端列名称映射到我的应用程序中的列名称。

所以在我开始开发一个映射工具之前 - 如果已经存在这样的工具会更好。但是,我不知道我没有找到它。

这个工具实际上会读取一个excel或txt文件,允许我在右边命名新列的所有名称并拖放(例如)。

也许这个工具有一个xml或者我可以定义自定义列的东西,然后它会在右侧显示op。

我希望你知道我的意思,并且有人也需要这个。

谢谢

info update

我想提一些事情作为我的问题的更新,如果它不迟到:我有大约50个标题/列(例如:名字,中间名,街道1,街道2,...)。因此,每当客户端给我他的excel文件(联系人备份)时,我总是需要做的是手动将每个列的数据复制到我的那一列。问题是,每个客户端都有不同的列名,而且客户端的一些列也可以转到我这边的多个列。

所以我认为,如果我找不到解决方案,我会制作一个c ++ / qt应用程序,这需要一个excell并让我分配(拖拽等等)他身边的每一列或更多我的一面。

我还没有做过任何vb编程,所以如果你能更详细地了解如何解决这个问题,那将会很棒。

2 个答案:

答案 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

microsoft social forums

的更多信息

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