【问题标题】:Automate Importing Multiple Excel Worksheets into SQL自动将多个 Excel 工作表导入 SQL
【发布时间】:2009-09-07 02:08:32
【问题描述】:

我需要允许用户选择 Excel 文件,然后将所有工作表上传到 SQL 表。我不知道该怎么做。每张纸的格式完全相同。并且工作表格式与 SQL 表格式匹配。

【问题讨论】:

  • 不,那不可用。 DTS 或其他方法。
  • 劳动节没有答案? :-)

标签: sql-server vba vb6 excel dts


【解决方案1】:

您可以将 ODBC 提供程序用于 Excel 文件。这是一些用 javascript 编写的代码,用于将 Excel 文件导入 SQL Server 表。每个工作表都被视为一个表格。数据类型存在一些问题,因为 ODBC 驱动程序通过读取每列的第一个值来推断每列的数据类型,因此如果列的第一行数据中有数字,则整个列将被读取为数字,并且每个“非数字”值将被读取为 NULL。

var objCat = new ActiveXObject("ADODB.Connection"); 
var objRSExcel = Server.CreateObject("ADODB.Recordset");
objRSExcel.CursorLocation = 3;
var file =  "imported_file.xls";
var TableName = "[Sheet1$]"

// Database Creation
objCat.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties=Excel 8.0;";                    
objCat.Open();
objRSExcel.Open("SELECT * FROM " + TableName, objCat);

var rsInsert = Server.CreateObject("ADODB.Recordset");
rsInsert.Open("SELECT * FROM [TARGET_TABLE]", cn, 1, 3);

while (!objRSExcel.EOF) {
    rsInsert.AddNew();
    for (var j=0;j<objRSExcel.Fields.Count; j++) {
        rsInsert.Fields(j).Value = objRSExcel.Fields(j).Value;
    }
    rsInsert.Update();
    objRSExcel.MoveNext();
}
objRSExcel.Close();
rsInsert.Close();

【讨论】:

  • "数据类型存在一些问题,因为 ODBC 驱动程序通过读取每列的第一个值来扣除每列的数据类型,因此如果一列的第一行数据中有数字,则整列将是读取为数字,每个“非数字”值都将被读取为 NULL。”大声笑,这似乎不太好!
  • 是的,你知道,MS 库远非完美。
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多