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

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

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

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

也许这个工具有一个XML或什么东西,我可以定义我的自定义列,然后它会显示在右侧的操作。

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

谢谢

信息更新

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

所以我想,如果我找不到解决scheme,我会做一个C ++ / QT应用程序,它需要一个excell,并让我分配(拖动,等..)他的每一列到我的列或更多列侧。

我没有做任何vb编程,所以如果你可以更详细的解决如何解决我的vb这将是伟大的。

冷杉部分的答案 :你可以用一个简单的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 

更多信息在微软社交论坛

此外,您可以使用外部xml文件参数化映射(源表和目标表和映射字段)。

答案的第二部分 :你问是否有其他人有这个需要,如果这是一个好主意。 那么这是一个很好的build议。 由于这个原因,他们是这个function的一些解决scheme。

首先,这种技术被命名为ETL 。 提取 – 转换 – 加载。

每个数据库都有自己的工具

  • SQL Server导入和导出向导
  • Oracle数据泵和装载程序
  • 等等

还存在特定的技术:

  • 来自微软的SSIS 。
  • IBM WebSphere DataStage
  • 等等

所有这些工具都具有映射列function。

我使用了一个通用的映射机制,通过几个数组configuration你的应用程序中使用的名称(aDsNames)这些在你的源代码中,csv文件在你的情况下(aDbNames)我走在源代码中的字段,检查如果getDbName(name)在aDsNames中,并且如果是,则将插入string中的值写入数据库。 你可以这样做,通常我的应用程序向服务器上的数据库模块请求一个字段,这个模块转换为数据库名并执行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