首页 新闻 会员 周边

Excel导入导出的问题 错误信息外部表不是预期的格式

1
悬赏园豆:50 [已解决问题] 解决于 2010-12-27 12:24

我把数据导入到execl  然后把excel导进到数据库出错 应该怎么解决??

 

 

代码
public bool ExportExcel(DataTable myDataTable, string saveFileName)
{
try
{
if (saveFileName.IndexOf(":") < 0) return false; //被点了取消

Microsoft.Office.Interop.Excel.Application xlApp
= new Microsoft.Office.Interop.Excel.Application();
object missing = System.Reflection.Missing.Value;

if (xlApp == null)
{
MessageBox.Show(
"无法创建Excel对象,可能您的机子未安装Excel");
return false;
}
Microsoft.Office.Interop.Excel.Workbooks workbooks
= xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook
= workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet
= (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //取得sheet1
Microsoft.Office.Interop.Excel.Range range;
range
= worksheet.Columns;
range.HorizontalAlignment
= Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; //水平对齐设置
range.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; //垂直对齐设置
range.ColumnWidth = 15;
#region 写入字段
worksheet.Cells[
1, 1] = "钻石号";
//.....
worksheet.Cells[1, 21] = "类型外键";
#endregion
//写入数值
for (int r = 0; r < myDataTable.Rows.Count; r++)
{
worksheet.Cells[r
+ 2, 1] = myDataTable.Rows[r]["DiamNumber"]; //钻石号
//....
worksheet.Cells[r + 2, 21] = myDataTable.Rows[r]["PcID"]; //类型外键
}
worksheet.SaveAs(saveFileName, missing, missing, missing, missing, missing, missing, missing, missing, missing);
workbook.Close(missing, missing, missing);
xlApp.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
return true;
}
catch (Exception ex)
{
return false;
}
}

 

问题补充: 不需要链接 需要具体的思路 谢谢 我导出的excel 然后打开他的时候 http://hi.csdn.net/attachment/201012/25/8904726_1293243640Npo7.jpg 会出现这个问题
村树的主页 村树 | 初学一级 | 园豆:50
提问于:2010-12-24 16:44
< >
分享
最佳答案
1

经过测试,你的代码没有问题。

能把具体错误信息发出来么?截图,原文等等~

收获园豆:35
葡萄城技术团队 | 菜鸟二级 |园豆:411 | 2010-12-24 17:53
http://topic.csdn.net/u/20101224/16/66241442-39b3-4f1a-91bd-7842c465bcda.html 这个更详细
村树 | 园豆:50 (初学一级) | 2010-12-24 17:54
错误信息就是 外部表不是预期的格式
村树 | 园豆:50 (初学一级) | 2010-12-24 17:54
在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data.OleDb.OleDbConnection.Open() 在 Patti.Web.Admin.product.DataInput.btnInput1_Click(Object sender, EventArgs e) 位置 E:
村树 | 园豆:50 (初学一级) | 2010-12-24 17:57
string mystring = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '" + XLS_FullName + "'" + ";Extended Properties=Excel 8.0;Persist Security Info=False "; OleDbConnection cnnxls = new OleDbConnection(mystring); cnnxls.Open(); Open();的时候报错
村树 | 园豆:50 (初学一级) | 2010-12-24 17:58
这说明是你的链接字符串不对。 Provider = Microsoft.ACE.OLEDB.12.0; 用这个替换原来的Provider,其他不动试试~
葡萄城技术团队 | 园豆:411 (菜鸟二级) | 2010-12-24 18:23
@村树:这说明是你的链接字符串不对。 Provider = Microsoft.ACE.OLEDB.12.0; 用这个替换原来的Provider,其他不动试试~
葡萄城技术团队 | 园豆:411 (菜鸟二级) | 2010-12-27 11:57
其他回答(3)
0
收获园豆:5
邀月 | 园豆:25475 (高人七级) | 2010-12-24 16:54
我的代码是这个样子的 不知道那里有问题
支持(0) 反对(0) 村树 | 园豆:50 (初学一级) | 2010-12-24 17:24
0

你导入的EXCEL是2007的,而你的代码只能导入2003

收获园豆:5
长风一剑 | 园豆:29 (初学一级) | 2010-12-24 18:14
有没有解决的办法??
支持(0) 反对(0) 村树 | 园豆:50 (初学一级) | 2010-12-25 08:54
0

操纵excel,建议尽量避免使用微软官方office的api,可以选择NPOI

---------------

NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况 下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。目前POI的稳定版本中仅支持Excel文件格式xls,其他的都属于不稳定版本(放在poi的scrachpad目录中)。

--------------

为什么要用NPOI呢?

第一点,你不需要在服务器上安装微软的Office,可以避免版权问题。

第二点,使用起来比Office PIA的API更加方便,更人性化。

第三点,你不用去花大力气维护NPOI,NPOI Team会不断更新、改善NPOI,绝对省成本。

第四点,很多事情是html和cvs法做不到的,比如说公式计算[Cell C1]=A1+B1*A2、单元格高级样式(如文本旋转、对齐、宽度)等,其中公式计算可以适当减轻服务器端的计算压力

第五点,你很难保证你的客户机器上都安装了Office 2007或Office Compatiblity Pack for Office 2003,出于向前兼容的考虑,还是生成Office 97-2003格式比较可靠

 

--------

以上摘自tonyqus的博客,他那里有详细的中文教程,感兴趣可以研究一下

http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html

收获园豆:5
键盘敲击者 | 园豆:253 (菜鸟二级) | 2010-12-26 23:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册