c # Ошибка вставки в Excel, если строковые данные больше 255 символов - PullRequest
4 голосов
/ 28 декабря 2011

Я пытаюсь экспортировать некоторые данные в 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 не может вставить более 255 символов? , ноэто не в c #,

Я также сослался на http://support.microsoft.com/kb/213841 и не получил никакого решения.

Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 28 декабря 2011

Сначала я думал, что вы можете определить тип данных (для заметок / текста) ячеек перед записью данных, но это не представляется возможным из этой статьи http://support.microsoft.com/kb/278973 (примерно на полпути вниз он явно заявляет, что определить тип данных в Excel невозможно.)

«Лучшее» решение, которое я могу вам предложить, - это нарезать ваши данные на 255 кусочков и вставить их в файл Excel в столбцы nieghbouring. оттуда вы можете использовать некоторые взаимодействия Excel, чтобы соединить их вместе.

0 голосов
/ 23 октября 2013

Попробуйте использовать этот код, может он поможет

    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)
        {                
        }
    }
0 голосов
/ 11 января 2012

Что я наконец-то сделал:

Поскольку я не мог собрать достаточно ответов и не смог решить проблему, я переключился на объект Excel (Office Interop), и проблема не возниклаТеперь.

...