我正在尝试将一些数据导出到Excel。我正在使用OLEDB 12.连接字符串看起来像:
"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 unable to insert more than 255 chars?但它不是c#,
我也提到了http://support.microsoft.com/kb/213841而没有得到任何解决方案。
请帮忙。
答案 0 :(得分:1)
我最初认为您可以在编写数据之前定义单元格的数据类型(备忘录/文本),但是这篇文章似乎无法在本文http://support.microsoft.com/kb/278973中找到(大约一半下来)显然无法在excel中定义数据类型。)
我能为您提供的“最佳”解决方案是将您的数据切割成255个字符,并将它们插入到excel文件中的nieghbouring列中。从那里你可以使用一些excel互操作将它们拼接在一起。
答案 1 :(得分:0)
我最后做了什么:
由于我无法收集到足够多的回复且无法解决问题,因此我切换到Excel对象(Office Interop)并且现在没有问题。
答案 2 :(得分:0)
尝试使用此代码,可能会帮助
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)
{
}
}