当字符串数据超过255个字符时,向Excel中插入错误
本文关键字:Excel 错误 插入 字符 数据 字符串 255个 | 更新日期: 2023-09-27 18:19:00
我试图导出一些数据到Excel。我用的是oledb12。连接字符串看起来像:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES;'"
我使用INSERT查询。但是只要目标列中的数据超过255个字符,就会出现异常。
Exception Details: System.Data.OleDb.OleDbException: The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
有一个类似的帖子上SO: Excel无法插入超过255个字符?但它不是c#,
我也参考了http://support.microsoft.com/kb/213841,没有得到任何解决方案。
请帮。
我最初认为您可能能够在写入数据之前定义单元格的数据类型(备忘录/文本),但这在本文http://support.microsoft.com/kb/278973中似乎是不可能的(大约一半的时候,它明确表示在excel中定义数据类型是不可能的)
我能给你的"最佳"解决方案是将你的数据切成255个字符块,并将它们插入到excel文件的相邻列中。从那里你可以使用一些excel互操作将它们拼接在一起。
我终于:
由于我无法收集到足够的回复,无法解决问题,我切换到Excel对象(Office Interop),现在没有问题了
尝试使用这段代码,可能会有所帮助
public static void DataSetsToExcel(DataSet dataSet, string filepath)
{
try
{
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0 Xml;";
string tablename = "";
DataTable dt = new DataTable();
foreach (System.Data.DataTable dataTable in dataSet.Tables)
{
dt = dataTable;
tablename = dataTable.TableName;
using (OleDbConnection con = new OleDbConnection(connString))
{
con.Open();
StringBuilder strSQL = new StringBuilder();
strSQL.Append("CREATE TABLE ").Append("[" + tablename + "]");
strSQL.Append("(");
for (int i = 0; i < dt.Columns.Count; i++)
{
strSQL.Append("[" + dt.Columns[i].ColumnName + "] text,");
}
strSQL = strSQL.Remove(strSQL.Length - 1, 1);
strSQL.Append(")");
OleDbCommand cmd = new OleDbCommand(strSQL.ToString(), con);
cmd.ExecuteNonQuery();
for (int i = 0; i < dt.Rows.Count; i++)
{
strSQL.Clear();
StringBuilder strfield = new StringBuilder();
StringBuilder strvalue = new StringBuilder();
for (int j = 0; j < dt.Columns.Count; j++)
{
strfield.Append("[" + dt.Columns[j].ColumnName + "]");
strvalue.Append("'" + dt.Rows[i][j].ToString().Replace("'", "''") + "'");
if (j != dt.Columns.Count - 1)
{
strfield.Append(",");
strvalue.Append(",");
}
else
{
}
}
if (strvalue.ToString().Contains("<br/>"))
{
strvalue = strvalue.Replace("<br/>", Environment.NewLine);
}
cmd.CommandText = strSQL.Append(" insert into [" + tablename + "]( ")
.Append(strfield.ToString())
.Append(") values (").Append(strvalue).Append(")").ToString();
cmd.ExecuteNonQuery();
}
con.Close();
}
}
}
catch (Exception ex)
{
}
}