在网上也查了很久,说的情况和我的都不一样.因为我是一段相同代码有的表能导出,有的表不能导出,后来终于找到问题所在原来是我不能导出的那张表里有个字段的内容太长了,虽然它的长度符合数据表的设计,但是在导出EXCEL时就报我上面说的那个错了.想问下,有什么办法可以解决导出时如果有个字段过长的问题,最好不要截断字段的内容.代码: object m_objOpt = null;
Excel.Range m_objRange = null;
Excel.ApplicationClass excel1 = null;
Excel.Workbooks workbooks;
Excel.Workbook workbook;
Excel.Worksheet worksheet = null;
Excel.Sheets worksheets;
string filenamepath = "";
string tempfilename = "";
string filepath = ""; //SQL语句省略了.....导出的数据放在DS.table[0]里 DataSet ds = DataExecute.ExecuteDataset(DataExecute.CONN_DataSTRING, CommandType.Text, strSql);
if (ds.Tables[0].Rows.Count == 0)
{
assist.WebMessageBox(this.Page, "没有可供导出的查询数据!");
return;
}
excelinit(); //这个过程调用模板,没有问题.
dataWrite(ds.Tables[0], "A7表", "B11"); //写入数据,就是这个过程报错了.
endexcel(); //关闭EXCEL protected void dataWrite(System.Data.DataTable dt, object sheetnumber, object beginposition)
{
object[,] objData = null;
try
{
worksheet = (Excel.Worksheet)worksheets.get_Item(sheetnumber);
}
catch
{
}
worksheet.Activate(); //必须写,用来触发数据的焦点。
worksheet.Unprotect("9ijnbGT%$esz");
objData = new Object[dt.Rows.Count, dt.Columns.Count];
string value = "";
for (int i = 0; i < dt.Rows.Count; i++) //所有数据读到数组中
{
for (int j = 0; j < dt.Columns.Count; j++)
{
value = dt.Rows[i][j].ToString().Trim();
if (value != "")
objData[i, j] = dt.Rows[i][j].ToString().Trim();
else
objData[i, j] = null;
}
}
m_objRange = worksheet.get_Range(beginposition, m_objOpt);
m_objRange = m_objRange.get_Resize(dt.Rows.Count, dt.Columns.Count);
m_objRange.set_Value(m_objOpt, objData); //就是这句语句报错.当他把数组里的内容赋值给EXCEL时,里面如果有个字段长度过长,就报错了. }
Excel.Range m_objRange = null;
Excel.ApplicationClass excel1 = null;
Excel.Workbooks workbooks;
Excel.Workbook workbook;
Excel.Worksheet worksheet = null;
Excel.Sheets worksheets;
string filenamepath = "";
string tempfilename = "";
string filepath = ""; //SQL语句省略了.....导出的数据放在DS.table[0]里 DataSet ds = DataExecute.ExecuteDataset(DataExecute.CONN_DataSTRING, CommandType.Text, strSql);
if (ds.Tables[0].Rows.Count == 0)
{
assist.WebMessageBox(this.Page, "没有可供导出的查询数据!");
return;
}
excelinit(); //这个过程调用模板,没有问题.
dataWrite(ds.Tables[0], "A7表", "B11"); //写入数据,就是这个过程报错了.
endexcel(); //关闭EXCEL protected void dataWrite(System.Data.DataTable dt, object sheetnumber, object beginposition)
{
object[,] objData = null;
try
{
worksheet = (Excel.Worksheet)worksheets.get_Item(sheetnumber);
}
catch
{
}
worksheet.Activate(); //必须写,用来触发数据的焦点。
worksheet.Unprotect("9ijnbGT%$esz");
objData = new Object[dt.Rows.Count, dt.Columns.Count];
string value = "";
for (int i = 0; i < dt.Rows.Count; i++) //所有数据读到数组中
{
for (int j = 0; j < dt.Columns.Count; j++)
{
value = dt.Rows[i][j].ToString().Trim();
if (value != "")
objData[i, j] = dt.Rows[i][j].ToString().Trim();
else
objData[i, j] = null;
}
}
m_objRange = worksheet.get_Range(beginposition, m_objOpt);
m_objRange = m_objRange.get_Resize(dt.Rows.Count, dt.Columns.Count);
m_objRange.set_Value(m_objOpt, objData); //就是这句语句报错.当他把数组里的内容赋值给EXCEL时,里面如果有个字段长度过长,就报错了. }
mySheet.get_Range(mySheet.Cells[beginRow, 1], mySheet.Cells[(beginRow + row-1), content.Length]).Value2 = dataArray;http://www.cnblogs.com/huadd/archive/2009/05/08/1452788.html