OleDbConnection con = new OleDbConnection(_connectionString);
string strExcel = "select * from [" + sheetName + "$]";
OleDbDataAdapter cmd = new OleDbDataAdapter(strExcel, con);
con.Open(); DataTable ExcelData = new DataTable();
cmd.Fill(ExcelData);
con.Close();在cmd.Fill(ExcelData)时候经常报这个错误。 每次都要打开excel,然后把内容剪切出来,把空行在重新删除一遍。总觉得不是办法。从表面上看,把水平条移到最右边也只是“AL”列,垂直的移到最下面52行。 不知道是什么原因,求高手指导。
string strExcel = "select * from [" + sheetName + "$]";
OleDbDataAdapter cmd = new OleDbDataAdapter(strExcel, con);
con.Open(); DataTable ExcelData = new DataTable();
cmd.Fill(ExcelData);
con.Close();在cmd.Fill(ExcelData)时候经常报这个错误。 每次都要打开excel,然后把内容剪切出来,把空行在重新删除一遍。总觉得不是办法。从表面上看,把水平条移到最右边也只是“AL”列,垂直的移到最下面52行。 不知道是什么原因,求高手指导。
string strExcel = "select * from [\"" + sheetName + "$\"]";或者
string strExcel = "select * from [\"" + sheetName + "\"$]";忘记是哪种了
{
dataGridView1.DataSource = null;
#region 调入EXCEL文件
OpenFileDialog ope = new OpenFileDialog();
ope.Filter = "EXCEL文件(*.xls)|*.xls|EXCEL文件(*.xlsx)|*.xlsx";
if (ope.ShowDialog() == DialogResult.Cancel) return;
string fileNameString = ope.FileName;
if (fileNameString.Trim() == " ")
{ return; } fileName = fileNameString.ToString();
string strCon = string.Format(" Provider = Microsoft.Ace.OLEDB.12.0 ; Data Source = {0};Extended Properties=Excel 12.0", fileNameString);
OleDbConnection myConn = new OleDbConnection(strCon);
OleDbConnection conn = new OleDbConnection(strCon);
try
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string SheetName = dt.Rows[0]["TABLE_NAME"].ToString();
comboBox1.Items.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
comboBox1.Items.Add(dt.Rows[i]["Table_Name"].ToString());
} string strCom = string.Format("SELECT cgoodspn,cgoodsclass,ramont FROM [{0}]", SheetName);
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
DataSet myDataSet;
myDataSet = new DataSet();
//myCommand.Fill(myDataSet, "[+SheetName+]");
int iRowCount = myCommand.Fill(myDataSet, "[+SheetName+]");
myConn.Close();
dataGridView1.DataSource = myDataSet.Tables["[+SheetName+]"];
ks = 0;
}
catch (Exception)
{
MessageBox.Show("您已经打开此表,或此表中未有您所查询的内容");
}
#endregion
}
那是因为我们认为没有使用是【那个范围内的cell里都是空的,没有值】
但是excel不这样认为,他认为你的某个cell只要是进入过编辑状态就表示在使用,要想消除【使用】这个状态必须删除这个行或者列。如果你的源文件是系统生成的,那没有关系了,如果会有认为操作你就必须考虑这种情况。有人随便点了2下你的数据取得就都变了。
所以你用这种方法取得数据必须先保证你execl文件的正确性
其实这个可以在读之前就行check的
string strCon = " Provider = Microsoft.ACE.OLEDB.12.0;
Data Source =C:\\08.xlsx;ExtendedProperties=Excel 12.0";
//SQL要查询的sheet
string sql = "select * from [Sheet1$]";
//存放数据用的
DataSet ds = new DataSet();
//打开连接
OleDbConnection conn = new OleDbConnection(strCon);
conn.Open();
//取得数据
OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);
//填充数据
myCommand.Fill(ds, "[Sheet1$]");
//关闭
conn.Close();试一下吧,你遇到的挺特别的
xls和xlsx我已经用split区别了,03跟07的连接也区分了。
我的问题应该是出在表里面的数据上。 如果把所有数据剪切出来,粘贴到新的excel文件中,就可以了。