我用C#做的一個小程式,讀取EXCEL,運行沒問題,但是換了電腦就不能運行,提示無法找到列0。對方電腦上裝了正版OFFICE365。下面是代碼,望高手指教。
private void button1_Click(object sender, EventArgs e)
{
string strInputTemplate = Application.StartupPath + "\\Input Template.xlsx";
string strSqlInput = "select 產品型號,車間 from [Sheet1$]";
DataTable dtInput = DtReadExcel(strSqlInput, strInputTemplate);
MessageBox.Show(dtInput.Rows[0]["產品型號"].ToString());
}
public static DataTable DtReadExcel(string strsql, string strfilename)//回傳讀取EXCEL的表
{
string strConn;
strConn = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + strfilename + ";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\";";
try
{
OleDbConnection OleConn = new OleDbConnection(strConn);
OleConn.Open();
OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(strsql, OleConn);
DataSet OleDsExcle = new DataSet();
OleDaExcel.Fill(OleDsExcle, "Sheet1");
OleConn.Close();
return OleDsExcle.Tables[0];
}
catch (Exception ex)
{
DataTable dt = new DataTable("ex");
DataRow dr = dt.NewRow();
dr[0] = ex.ToString();
dt.Rows.Add(dr);
return dt;
}
}

uj5u.com熱心網友回復:
估計是報錯導致的,報錯了,走到catch里面了,你catch里面報錯要顯示出來,你這樣看不到出什么錯
public static DataTable DtReadExcel(string strsql, string strfilename)//回傳讀取EXCEL的表
{
//這里報錯啦
}
catch (Exception ex)
{
DataTable dt = new DataTable("ex");
DataRow dr = dt.NewRow();
dr[0] = ex.ToString();
dt.Rows.Add(dr);
return dt;
}
}
uj5u.com熱心網友回復:
你不設斷點看一下的啊,你這里很可能是例外進exception了,dr[0]找不到uj5u.com熱心網友回復:
你的代碼和我不一樣啊。我本來運行是沒有問題的。沒有例外。只是換了一臺電腦就不行了。我感覺是因為我的電腦上的OFFICE是32位,而別的電腦上的OFFICE是64位的原因。我現在實驗了2種解決方案都能解決,只是不知道是不是根本解決了。:1是把專案中的Any CPU改成了X64。2.是在64位OFFICE電腦上裝一個ACCESSDATABAEENGIN32位的。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/39805.html
標籤:C#
上一篇:IIS部署網站
