自动纠正白痴的Excel电子表格

时间:2009-08-12 08:27:41

标签: excel asp-classic vbscript odbc

我的客户端无法正确格式化电子表格。我已经10次问过他们遵循一个明智的指导方针(如格式化正确的数据库),但由于他们缺乏智慧或专业或两者兼而有之,他们只是不能/不会这样做。

我为电子表格设置了ODBC连接,并提取除包含产品数量或产品价格的列之外的数据。除非我在Excel中手动将每个列的类型设置为“数字”,否则显示结果的ASP页面中的值将显示为空。

是否可以编写一个SQL语句来改变数据类型?只要ADODB.Recordset显示所有列的值,我就不关心将每列转换为字符串。

代码:

<%
Dim MM_SQLSource

MM_SQLSource = "SELECT * FROM [Inventory$]"
Set rsGetExcelInfo = Server.CreateObject("ADODB.Recordset")
rsGetExcelInfo.ActiveConnection = MM_Excel_Connect
rsGetExcelInfo.Source = MM_SQLSource
rsGetExcelInfo.CursorType = 0
rsGetExcelInfo.CursorLocation = 2
rsGetExcelInfo.LockType = 1

rsGetExcelInfo.Open()
%>

3 个答案:

答案 0 :(得分:1)

这可能不完全是你客户的错。 Excel有时会对如何格式化列有自己的想法。例如,如果你有一个包含邮政编码的栏目,有些栏目包含加号4,有些栏目没有,那么对于如何格式化该栏目几乎就是一个废话。

至于你原来的问题,根据这个site,CONVERT是一个有效的SQL标量函数,所以可能类似

SELECT CONVERT(BadField, SQL_CHAR) AS FixedField FROM [Inventory$]

可能有用吗?

我的第一个倾向是建议使用COM从电子表格中读取数据。我很确定你能够读取每个单元格的格式并相应地处理它,但我总是通过COM发现Excel很难而且速度不是很快(我只是用C ++完成)。

答案 1 :(得分:1)

不幸的是AFAIK所有的ODBC / ADO / OLEDB /任何小工具都会在检查几行后猜测每列的数据类型(默认为8,我相信)。

Python [1] /Perl/PHP/.Net等可用的软件包/模块/库可让您逐个单元地读取Excel文件。更好的类型将为每个单元格提供一个值和一个细粒度类型(text / numeric / date / boolean / error / empty) - 使用该信息以及每列中应该包含的内容的知识,您可以做修理工作。

[1]例如http://pypi.python.org/pypi/xlrd其中我是作者...被(a)ODBC问题(b)'save-as-CSV'问题(c)COM问题所困扰

答案 2 :(得分:1)

如何停止使用Excel并将其放入具有某些用户数据输入表单的真实数据库中?

将电子表格放入数据库应该不会太困难。访问会很好。或者使用SQL Server后端和Access前端。或者,如果您可以付出更多努力,请建立一个Web前端。

你会发现,做到这一点越困难,无论如何你的数据越差,你的错误,不一致和遗漏就越多。

帮助每个人并使这件事正式化。