0

所以这不是什么大不了的事,但由于谷歌没有返回任何关于它可能是 Excel 驱动程序问题的最新信息(主要是 2007 年左右)......我来这里是为了问这个问题,因为我发现的“答案”不是可以接受,无需进一步研究。

我的问题:

编写动态 OPENROWSET 查询清除并插入新数据以向特定用户发送报告 - 基本 excel 报告包含一些公式,其中它根据插入的数据计算和求和,并且乘法公式似乎工作正常,但除非总计在 Excel 中被正确格式化为“数字”而不是文本,总和将不起作用......

解决方案必须是基于自由格式的(如果有解决方案的话),我不想将我的所有代码都转移到 SSIS ......

更新/插入代码:

    SELECT @sqlu = 'UPDATE OPENROWSET(' +
    '''Microsoft.ACE.OLEDB.12.0'', ' +
    '''Excel 12.0;Database=' + @File + ';HDR=YES'', ' +
    '''SELECT * FROM [Base$B1:G601]'')
    SET 
    col1 = '''', col2 = '''', col3 = '''', col4 = '''', col5 = '''', col6 = '''' '


    EXEC (@sqlu)


    SELECT @sqli = 'INSERT INTO OPENROWSET(' +
    '''Microsoft.ACE.OLEDB.12.0'', ' +
    '''Excel 12.0;Database=' + @File + ';HDR=NO'', ' +
    '''SELECT * FROM [Base$B1:G2]'')

    SELECT col1, col2, col3, col4, col5, col6
    FROM [DATABASE].[dbo].tbl_CIM
    WHERE col1 IN(''' + @area + ''')'


    EXEC (@sqli)

第二个问题,现在可能不是问题,但稍后 - 在插入之后,它似乎在结果周围创建了边界。是否还有一种潜在的方法可以在结果传输期间删除它们?

如果是驱动程序问题,请提供任何帮助或研究资源,因为我找不到任何帮助或资源。

4

2 回答 2

0

我知道的唯一方法是在您正在写入的 Excel 工作表中创建一个虚拟数据行。将假数据以您希望数据导出的相同格式放入此行。如果需要,您可以隐藏此行。

这应该可以解决这两个问题,但是您必须处理虚拟行,如果您将数据用于数据透视表,这可能会很烦人

于 2012-04-04T07:36:06.657 回答
0

您是否尝试添加IMEX=1到您的连接字符串?它应该强制驱动程序将列中的所有内容作为文本提供给您,而不管它们的解释格式如何。

这里有一个使用它的连接字符串的完整示例。

于 2012-04-04T07:39:47.447 回答