高分求解Excel导入问题,回答有分!

jxnetinfo 2004-11-01 04:05:37
如果一列其它数据都是文本型的数据的时候,如果其中有几个是数字型的数据,而又没有将其手动设为文本型(即默认为常规),那么用OLEDB连接EXCEL,SELECT出来的时候就是NULL值。。。
有没有办法解决?
-------------------------------------------------------------
语句如下:
INSERT INTO TempTable
SELECT
UserName,UserTel,
FROM
OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=C:\Xls\Test.xls' ,[RatecardForEbookingInput$])
当UserTel为纯数字时 Select出来就为Null

要求:
导入程序是多次运行,所以中途不需要用户介入,不能让用户手功改Excel文件的格式
(其实我也试过把Excel的UserTel列改为 文本类型,同样有上面的错误)
问题解决即结贴!!!

...全文
261 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qt8518 2004-11-02
  • 打赏
  • 举报
回复

麻烦大家帮忙看看是什么问题啊!以下是显示!

“/GTAlarmWebApp”应用程序中的服务器错误。
--------------------------------------------------------------------------------

因为配置类型不正确,系统无法开始服务器进程。请检查用户名和密码。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Runtime.InteropServices.COMException: 因为配置类型不正确,系统无法开始服务器进程。请检查用户名和密码。

源错误:


行 19: public void BaobiaoToExcel1(DataTable datatable)
行 20: {
行 21: Excel.Application excel= new Excel.Application();
行 22: int rowIndex=1;
行 23: int colIndex=0;


源文件: c:\inetpub\wwwroot\gtalarmpro\dallib\outputtoexcel.cs 行: 21

堆栈跟踪:


[COMException (0x8000401a): 因为配置类型不正确,系统无法开始服务器进程。请检查用户名和密码。]
DALLib.OutPutToExcel.BaobiaoToExcel1(DataTable datatable) in c:\inetpub\wwwroot\gtalarmpro\dallib\outputtoexcel.cs:21
GTAlarmWebApp.Excel.Button1_Click(Object sender, EventArgs e) in d:\国通文档\项目编码\gtservice\gtalarmpro\gtalarmwebapp\excel.aspx.cs:62
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573
jxnetinfo 2004-11-01
  • 打赏
  • 举报
回复
我试过使用 dhtkhnt(阿和) 的方法,能正确导入,但就是对Excel中某列的每一行数据进行修改,在前面加"'",真是太慢了
有没有 办法对Excel进行整列数据进行修改

zhouyong2052 2004-11-01
  • 打赏
  • 举报
回复
Excel.Workbook theWorkbook=Class读取数据库_ds.LoadExecl(@"D:\Documents and Settings\user\My Documents\新建文件夹_养老险名单\2004养老险人名单1-1.xls");
Excel.Sheets sheets=theWorkbook.Worksheets;
Excel.Worksheet thesheet=(Excel.Worksheet)sheets.get_Item(1);
int cols=thesheet.Columns.Count;
int rows=thesheet.Rows.Count;
int nowcols=thesheet.get_Range("A1","A1").CurrentRegion.Columns.Count;
int nowrows=thesheet.get_Range("A1","A1").CurrentRegion.Rows.Count;
Excel.Range range=thesheet.get_Range(thesheet.Cells[1,1],thesheet.Cells[nowrows,nowcols]);
System.Array myvalues=(System.Array)range.Cells.Value;
用Excel对象打开,不会有问题,
然后myvalues.GetValue(x,y) 引用每一个元素,填到数据库中
jxnetinfo 2004-11-01
  • 打赏
  • 举报
回复
我试过使用cast(UserTel as varchar(100)) 不行

dhtkhnt(阿和) :
你可以在数字型数据的加上前导'符号
--------------------------------------------------
那不是得手工修改Excel中的数据嘛,并且如果Excel中的数据多的话,可能会在性能上有问题
dhtkhnt 2004-11-01
  • 打赏
  • 举报
回复
是这样子的,你可以在数字型数据的加上前导'符号,就可以解决问题!
paul8765 2004-11-01
  • 打赏
  • 举报
回复
cast是sql server里的函数,查一下sql server里的帮助。
paul8765 2004-11-01
  • 打赏
  • 举报
回复
用cast函数转换,写到select语句里。
jxnetinfo 2004-11-01
  • 打赏
  • 举报
回复
lhx1977(清水无鱼) :
我试过把那一列设置为字符型也不行,再帮我想想,能不能在 导入语句中使用类型转换的方法
李洪喜 2004-11-01
  • 打赏
  • 举报
回复
自己在程序中设置那一列是字符型的,应该是可以的吧。
我导入的数据都是统一格式的。没有遇到过。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧