Excel导入问题 外部表不是预期的格式。 我从数据从一个页面导出到一个xls里面 然后把这个xls导入到另一个数据库 出现的问题 该怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据格式错了吧按照数据库里表结构导最好存成.csv文件 .csv文件以逗号还是什么分割的很好能的. aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111这样试下了. 这个你得试,EXCEL可以用这数据的好象. 而且从别的地方导出来的是excel 的版本 . 我也只能上传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; } }这是导出方法是这样的 string XLS_Path = "~/Admin/upFile/"; string XLS_Name = "裸钻导入_" + DateTime.Now.ToString("yyyyMMddHHmmsssss") + ".xls"; string XLS_FullName = string.Empty; string fileExtName = ""; if (fup2.PostedFile.ContentLength > 0) { try { fileExtName = fup2.PostedFile.FileName.Substring(fup2.PostedFile.FileName.LastIndexOf(".")); if (fileExtName != ".xls" || fileExtName.Length < 1) { lbMsg0.Text = "无效的文件,。"; return; } XLS_FullName = Server.MapPath(XLS_Path + XLS_Name); fup2.PostedFile.SaveAs(XLS_FullName); } catch (Exception ex) { lbMsg0.Text = ex.ToString(); } } else { lbMsg0.Text = "请选择文件后再上传!!!"; return; } var msg = ""; var begin = DateTime.Now; try { 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(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 DataTable dtSheetName = cnnxls.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } OleDbDataAdapter myCommand = null; DataTable dt = new DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select*from[" + strTableNames[0] + "]"; myCommand = new OleDbDataAdapter(strExcel, cnnxls); dt = new DataTable(); myCommand.Fill(dt); string AdminCName ="aa" var str = bll.BatchDiamond1(dt, AdminCName, pnum);这个是导入方法 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'"; using(OleDbConnection OleConn = new OleDbConnection(strConn)){ OleConn.Open(); String sql = "SELECT * FROM [Sheet1$]"; OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); DataSet ds= new DataSet(); OleDaExcel.Fill(ds); OleConn.Close();}检查excel,连接字符串 我先导出excel 然后导入 但是导入的时候 发现 open() 打不开了... 那么就是连接字符串的问题 是不是跟excel 本事有关啊? 我如何设置导出的excel 的版本 或是其他信息啊? 这个表是不是你自己导出的?你想再导入是吗?这个excel是不是输出流保存的。你用记事本打开看看。你用excel打开,并保存一份。再试下。 有没有办法 设置导出的excel的版本 导入的excel连接字符串 我用下载excel后 双击打开出现了这个 LZ用记事本打开这excel就知道怎么回事的了。LZ像4楼这样。aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111aaaaaaa,aaaaaaaaa,11111111111111111像读文本文件一样去读吧。只需要注意分割字符就好了。 分割的话 还是有弊端啊?? 我不想出现什么巧合 用excel 就不会 难道没什么办法可以做到?? 呵呵 问题找到了 因为本机装的是office2007 所以导出来的数据也是2007 但是我的连接字符串是2003的 所以出问题了 有没有办法判断 导入的excel版本?? 我从数据从一个页面导出到一个xls里面???是标准的XLS格式吗? 是版本的问题 office 2003 和 2007之间的问题 你可以去看看 [200] 两个问题 怎么样过滤字符串中的汉字 关于边框颜色问题,在线等! 高手进来看下,同时使用AutoComplete控件以及RadUpload控件出现问题 oa工作流怎么实现 ajax.net的问题?? 遇到一个特奇怪的问题,请各位老大帮下忙 ASP.Net 2005 如何与ASP共用COOKies 如何找出相同的地址。。 为什么打开模式窗口的脚本在IE 6.0.26以上的版本均不支持,有解决办法么? vs05里CSS效果出不来 DataTable dt = new DataTable()有没方法获取dt.Rows[每一行]的控件ID、Name或者类型啊
最好存成.csv文件
以逗号还是什么分割的很好能的.
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111
这样试下了.
我也只能上传excel版本
{
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;
}
}
这是导出方法是这样的
string XLS_Path = "~/Admin/upFile/";
string XLS_Name = "裸钻导入_" + DateTime.Now.ToString("yyyyMMddHHmmsssss") + ".xls";
string XLS_FullName = string.Empty;
string fileExtName = "";
if (fup2.PostedFile.ContentLength > 0)
{
try
{
fileExtName = fup2.PostedFile.FileName.Substring(fup2.PostedFile.FileName.LastIndexOf("."));
if (fileExtName != ".xls" || fileExtName.Length < 1)
{
lbMsg0.Text = "无效的文件,。";
return;
}
XLS_FullName = Server.MapPath(XLS_Path + XLS_Name);
fup2.PostedFile.SaveAs(XLS_FullName);
}
catch (Exception ex)
{
lbMsg0.Text = ex.ToString();
}
}
else
{
lbMsg0.Text = "请选择文件后再上传!!!";
return;
}
var msg = "";
var begin = DateTime.Now;
try
{
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();
//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
DataTable dtSheetName = cnnxls.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
//包含excel中表名的字符串数组
string[] strTableNames = new string[dtSheetName.Rows.Count];
for (int k = 0; k < dtSheetName.Rows.Count; k++)
{
strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
}
OleDbDataAdapter myCommand = null;
DataTable dt = new DataTable();
//从指定的表明查询数据,可先把所有表明列出来供用户选择
string strExcel = "select*from[" + strTableNames[0] + "]";
myCommand = new OleDbDataAdapter(strExcel, cnnxls);
dt = new DataTable();
myCommand.Fill(dt);
string AdminCName ="aa"
var str = bll.BatchDiamond1(dt, AdminCName, pnum);
这个是导入方法
using(OleDbConnection OleConn = new OleDbConnection(strConn))
{
OleConn.Open();
String sql = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
DataSet ds= new DataSet();
OleDaExcel.Fill(ds);
OleConn.Close();
}
检查excel,连接字符串
那么就是连接字符串的问题
是不是跟excel 本事有关啊?
我如何设置导出的excel 的版本 或是其他信息啊?
你想再导入是吗?这个excel是不是输出流保存的。
你用记事本打开看看。
你用excel打开,并保存一份。再试下。
LZ像4楼这样。
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111
aaaaaaa,aaaaaaaaa,11111111111111111像读文本文件一样去读吧。
只需要注意分割字符就好了。
我不想出现什么巧合 用excel 就不会 难道没什么办法可以做到??
但是我的连接字符串是2003的 所以出问题了 有没有办法判断 导入的excel版本??
是标准的XLS格式吗?
是版本的问题 office 2003 和 2007之间的问题 你可以去看看