protected void btnImPrice_Click(object sender, EventArgs e)
{
String path;
String name = null;
if (this.FdExcel.PostedFile.FileName.Trim() != "")
{
path = FdExcel.PostedFile.FileName.ToString();
name = System.IO.Path.GetFileName(path);
int i = path.LastIndexOf(".");
string name1 = path.Substring(i);
if (name1 == ".xls" || name1 == ".xlsx")
{
FdExcel.PostedFile.SaveAs(path );
//string delete = "delete enduserpriceinfo";
//string deleteenduserprice = "delete frominfo";
//DataBase db = new App_Data.SqlServer();
//db.excuteSql(delete);
//db.excuteSql(deleteenduserprice);
this.OpenExcel(path); }
} }
private void OpenExcel(string path)
{
DataBase db = new App_Data.SqlServer();
db.Open();
object missing = System.Reflection.Missing.Value;
Excel.Application excel = new Excel.Application();//lauch excel application
string filename = path;
if (excel == null)
{
Response.Write("<script>alert('Can't access excel')</script>");
}
else
{
excel.Visible = false;
excel.UserControl = true;
// 以只读的形式打开EXCEL文件
Excel.Workbook wb = excel.Workbooks.Open(filename, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);//取得第一个工作薄
//Excel.Workbook workbook = wb[1];
Excel.Sheets sheets = wb.Worksheets;
Excel._Worksheet ws = (Excel._Worksheet)wb.Sheets.get_Item(1); //取得总记录行数 (包括标题列)
string DowID= "";
string material= "";
string Condition = "";
double Rate;
string Curr;
string CustomerId;
string MaterialText;
string UOM;
int iRow = 2;
int sheetCount = sheets.Count;
//循环遍历工作簿
for (int i = 1; i <= sheetCount; i++)
{
ws = (Excel._Worksheet)wb.Sheets.get_Item(i);//这里一直报错不知道该怎么解决(错误:被调用的对象已与其客户端断开连接。 (异常来自 HRESULT:0x80010108 (RPC_E_DISCONNECTED)))
//单个工作薄的数据读取,把你上面的代码拷贝到这里
try
{
while (ws.get_Range("A" + iRow + "", Type.Missing).Value2 != null)
{
DowID = ws.get_Range("A" + iRow + "", Type.Missing).Value2.ToString();
material = ws.get_Range("D" + iRow + "", Type.Missing).Value2.ToString();
MaterialText = ws.get_Range("E" + iRow + "", Type.Missing).Value2.ToString();
Condition = ws.get_Range("G" + iRow + "", Type.Missing).Value2.ToString();
CustomerId = ws.get_Range("I" + iRow + "", Type.Missing).Value2.ToString();
Rate = (double)ws.get_Range("T" + iRow + "", Type.Missing).Value2;
Curr = ws.get_Range("U" + iRow + "", Type.Missing).Value2.ToString();
UOM = ws.get_Range("V" + iRow + "", Type.Missing).Value2.ToString();
if (Condition =="End User Customer/Material")
{ string sql = "insert into enduserpriceinfo(CustomerID,DistributionID,MaterialNumber,Curr,Rate) values('" + CustomerId + "','" + DowID + "','" + material + "','" + Curr + "'," + Rate + ")"; db.excuteSqlNoOpen(sql);
}
else
{ string sql2 = "insert into priceSold(CustomerID,DistributionID,MaterialNumber,Currency,Rate) values('" + CustomerId + "','" + DowID + "','" + material + "','" + Curr + "','" + Rate + ")"; db.excuteSqlNoOpen(sql2);
}
string sql3 = "insert into productinfo(DistributionID,MaterialName,BaseUnit) values('" + DowID + "','" + material + "','" + MaterialText + "','" + UOM + ")";
db.excuteSqlNoOpen(sql3); iRow++;
}
db.Close();
wb.Close(false, Type.Missing, Type.Missing);
excel.Quit();
System.GC.Collect();
// File.Delete(filename);
}
catch (Exception ex)
{
db.Close();
wb.Close(false, Type.Missing, Type.Missing);
excel.Quit();
System.GC.Collect();
//File.Delete(filename);
Page.ClientScript.RegisterStartupScript(this.GetType(), "shoebox", "<script language=javascript>alert('导入失败!第" + iRow + "行')</script>");
}
}
Page.ClientScript.RegisterStartupScript(this.GetType(), "shoebox", "<script language=javascript>alert('导入成功!')</script>");
}
}
}
System.IO.Path.GetExtension(FileUploadExcel.FileName)!=".xls" 还有比这个更好的方法
Response.Write("<script>alert('Can't access excel')</script>");Page.ClientScript.RegisterStartupScript(GetType(), "Message", "<script type='text/javascript'>alert('请先登录!');</script>");不看了 代码太长了 50分不容易拿啊~
Response.Write("<script>alert('Can't access excel')</script>");
改为:
Response.Write("<script>alert(\"Can't access excel\")</script>");
ws = (Excel._Worksheet)wb.Sheets.get_Item(i);//这里一直报错不知道该怎么解决(错误:被调用的对象已与其客户端断开连接。 (异常来自 HRESULT:0x80010108 (RPC_E_DISCONNECTED)))
wb.Close(false, Type.Missing, Type.Missing);
excel.Quit();
System.GC.Collect();
下个循环当然会报错了
wb.Close(false, Type.Missing, Type.Missing);
excel.Quit();
System.GC.Collect();
放在for循环外面,就不会报错了