excel2003和excel2007导入sqlserver2008问题

冷雪液 2011-06-16 09:59:54
同样的数据,放在excel2003中就可以成功导入数据库,
但是如果放入excel2007文件中就不能导入成功,
不知道这是怎么回事,希望高手指点。

适当贴点代码

/// <param name="startrow">起始行号</param>
/// <param name="endrow">终止行号</param>
/// <param name="filestream">文件流</param>
/// <returns>返回ArrayList</returns>
private ArrayList InputExcel(int startrow, int endrow, Stream filestream)
{
CompoundDocument doc = null;
ArrayList returnValue = new ArrayList();

//读取本地文件
string file = ExcelSavePath;

int sheet = int.Parse(QD.Trim()); //sheet从0开始
int noCol = int.Parse(QDL.Trim()); //清单列
int conUnitCol = int.Parse(DWL.Trim());//单位所在列
int conProjectCol = int.Parse(XMMCL.Trim());//项目名称所在列
try
{
doc = CompoundDocument.Read(filestream); //关键就是这里出错 (截图就是filestream对象的内容)

}
catch (Exception ex)
{
returnValue.Add(ex.Message);
}

if (doc == null) return returnValue;

byte[] bookdata = null;
Workbook book = null;
Worksheet mySheet = null;
try
{
bookdata = doc.GetStreamData("Workbook");
book = new Workbook();
book.Read(new MemoryStream(bookdata));
mySheet = book.Worksheets[sheet];
}
catch (Exception ex)
{
returnValue.Add(ex.Message);
}
}



报错的那行跟踪时,2003就可以读出数据,2007读取不出来,显示为null
下面是2007跟踪截图


下面是2003跟踪截图
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷雪液 2011-06-30
  • 打赏
  • 举报
回复
如果你经常光临Insus.NET的博客,你会留意到有一篇博文 Asp.net读取Excel文件 那只是列出Excel两个版本的连接语句。但是你的专案在应用时,也许不能固定用户只上传某一种版本的Excel文件而你在专案中取舍使用哪一种连接字串,所以你会尝试使用下面方法去解决,判断上传的Excel文件是什么版本的:


public static string GetExcelConnectionString(string file)
{
string connectionString = string.Empty;
string fileExtension = file.Substring(file.LastIndexOf(".") + 1);
switch (fileExtension)
{
case "xls":
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath(file) + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
break;
case "xlsx":
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + HttpContext.Current.Server.MapPath(file) + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'";
break;
}
return connectionString;
}



在专案中调用时(代码部分):

//从数据库取得上传的Excel文件名
string file = objDictionary["FileFullName"].ToString();
//获取中Excel的连接字串。
string excelConnectionString = GetExcelConnectionString(file);
//传入至OleDbConnection实例中去
OleDbConnection objConn = new OleDbConnection(excelConnectionString);
string sql = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter ObjDa = new OleDbDataAdapter(sql, objConn);
DataSet objDs = new DataSet();
ObjDa.Fill(objDs);
weifen234 2011-06-16
  • 打赏
  • 举报
回复
如果你实在是需要EXCEL2003和EXCEL2007两个都能兼容导入的话,可以参看一下这个http://topic.csdn.net/u/20101105/14/92df2751-a23d-41bc-be45-c4b2272e77fe.html
weifen234 2011-06-16
  • 打赏
  • 举报
回复
可能是你引入的excel的dll版本不对,2003和2007的dll不一样
net5354 2011-06-16
  • 打赏
  • 举报
回复
连接2007的和2003的字符串是不同的
insus 2011-06-16
  • 打赏
  • 举报
回复
子夜__ 2011-06-16
  • 打赏
  • 举报
回复
 DataTable Excel_UserInfo = new DataTable();
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
string strExcel = "select * from [sheet1$]";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(strExcel, strConn))
{
DataSet ds = new DataSet();
adaptor.Fill(ds);
Excel_UserInfo = ds.Tables[0];
}
酷儿 2011-06-16
  • 打赏
  • 举报
回复
问题不是出在你的代码上 有一个连接字 你看一下 12.0和8.0的 那个 主要是这个的原因 换一下就OK了
冷雪液 2011-06-16
  • 打赏
  • 举报
回复
感觉除了length和position不同之外,其他没有什么区别呀,就是想不通,不知道究竟哪里有问题。

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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