Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# / Excell 16000 строк / 20 сообщений из 20, страница 1 из 1
06.04.2014, 23:28:03
    #38606740
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Из c# через COM объекты создаю документ экселя и заполняю, при этом, не получается записать больше 16000 строк. На компьютере стоит Excell 2007, после создания объекта проверил ActiveWorkBook: верися 12 FileFormat xlOpenXMLWorkbook
Но при записи рейнжа облом.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public void WriteRange(ExcelRange TrgRange)
            {
                object ExcelRange = null;
                try
                {
                    ExcelRange = GetExcelRange(TrgRange);
                    COM.SetComProperty(ExcelRange, "Value", new object[] { (object)TrgRange.Data });
                }
                finally
                {
                    COM.ReleaseComObject(ref ExcelRange);
                }
            }
...
Рейтинг: 0 / 0
06.04.2014, 23:56:35
    #38606752
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
...
Рейтинг: 0 / 0
07.04.2014, 03:24:38
    #38606785
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
И что ты этим хотел сказать?
Worksheet size 1,048,576 rows
...
Рейтинг: 0 / 0
07.04.2014, 07:30:22
    #38606819
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
xKIA,

А какое количество столбцов в TrgRange?
...
Рейтинг: 0 / 0
07.04.2014, 10:14:58
    #38606917
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
16000 позволяет записать 16001 выдаёт ошибку. По моему, в 2003 такое ограничение было. В теории, документ и в 2007 может быть создан в режиме совместимости с более старыми версиями (документ новый создаётся никаких файлов не открывается), но я не вижу нигде признаков, что это не 2007 (смотрел в отладке объект).
...
Рейтинг: 0 / 0
07.04.2014, 10:16:03
    #38606921
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Сори не понял сразу вопроса, столбцов 7
...
Рейтинг: 0 / 0
07.04.2014, 10:40:50
    #38606949
igr_ok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
xKIA16000 позволяет записать 16001 выдаёт ошибку.Текст ошибки в студию
...
Рейтинг: 0 / 0
07.04.2014, 11:11:07
    #38606984
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Исключение из HRESULT: 0x800A03EC
...
Рейтинг: 0 / 0
07.04.2014, 13:04:15
    #38607148
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
...
Рейтинг: 0 / 0
08.04.2014, 10:08:52
    #38607991
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
К разделителям это не имеет отношения, диапазон тоже один, никаких формул в данном случае тоже не вставляется, тупые данные.
...
Рейтинг: 0 / 0
08.04.2014, 10:36:18
    #38608033
igr_ok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
xKIA,

Выкладывайте код создания листа Excel и вставки данных. Судя по ошибке, проблема в заданном диапазоне вставки. Но т.к. ошибки Excel мало информативны, лучше посмотреть код.
...
Рейтинг: 0 / 0
08.04.2014, 11:05:37
    #38608101
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Разделители - не единственная беда... посмотрите что с культурой потока... En-us?
...
Рейтинг: 0 / 0
08.04.2014, 13:00:38
    #38608337
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк

Нет, культура потока ru-Ru.

Заполняется так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
int QtyCol = 7;
            ExcelRange Range = new ExcelRange(1, 1, DocumentRow.RowCount + 30, QtyCol);

         
            int ExcelRow = 1;
            Range.SetValue(ExcelRow, 1, "Траля-ля");
--//--
            Range.SetValue(ExcelRow, 7, "Траля-ля");
            ExcelRow++;

            using (IExcel Excel = ExcelFactory.GetInstance())
            {
                Excel.NewDocument();

            for (int i = 0; i < DocumentRow.RowCount; i++)
            {
                ++DocumentRow.Row;
                Range.SetValue(ExcelRow, 1, DocumentRow.Значение1);
         --//--
                Range.SetValue(ExcelRow, 7, DocumentRow.Значение7);
                ExcelRow++;
                if (ExcelRow >= 16000) { Excel.WriteRange(Range); };
            }

     

                Excel.WriteRange(Range);
                Excel.AutoFitColumns();
                Excel.Visible = true;
            }




Модуль экселя тоже могу выложить, но он большой.
...
Рейтинг: 0 / 0
08.04.2014, 13:49:34
    #38608448
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Шедеврально.
Особенно позабавило вот это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
      for (int i = 0; i < DocumentRow.RowCount; i++)
            {
                ++DocumentRow.Row;
                Range.SetValue(ExcelRow, 1, DocumentRow.Значение1);
         --//--
                Range.SetValue(ExcelRow, 7, DocumentRow.Значение7);
                ExcelRow++;
                if (ExcelRow >= 16000) { Excel.WriteRange(Range); }; //<< Начиная с 16000 строки добавлять в книгу при каждой итерации по 16000+ строк...
            }
...
Рейтинг: 0 / 0
08.04.2014, 14:14:48
    #38608505
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Это отладка. на 1600 строке рейндж запишется, на 16001 нет
...
Рейтинг: 0 / 0
08.04.2014, 14:18:24
    #38608509
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
И насколько я понимаю, рейндж перезаписывается в тот же диапазон
...
Рейтинг: 0 / 0
08.04.2014, 14:23:03
    #38608520
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Если кто-то всё ещё не понимает, объясняю ещё раз: запись в эксель работает, можно даже записать формулы, но при ТУПОЙ записи без всяких формул (на которые влияет запятая там или точка с запятой, на что влияет локаль) можно записть только 16000 строк. МОЖНО ЗАПИСАТЬ. Sucessful Понятно?
При записи рейнджа 16001 строк и больше вываливается с ОШИБКОЙ. КАК ещё обяснять, б##ть!!!
...
Рейтинг: 0 / 0
08.04.2014, 14:56:36
    #38608601
xKIA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
Нашлась ошибка, посыпаю голову пеплом.
Но это надо просто фантастическое невезение: документ формируется по данным, которые часто изменяются и строки каждый раз разные, но это же надо было, что бы во время отладки ошибочная строка была именно 16001.
Какой-то урод назвал контрагента:
=========тра-ля-ля===========

С количеством всё в порядке - пишется теперь всё.
...
Рейтинг: 0 / 0
08.04.2014, 15:04:23
    #38608620
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
xKIAКакой-то уродпремию уроду за нахождение критической ошибки в программе )

http://globalscience.ru/article/read/23589/
...
Рейтинг: 0 / 0
08.04.2014, 15:20:07
    #38608653
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# / Excell 16000 строк
xKIA,

На всякий случай, для ускорения вставки данных в Excel:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
using System;
using System.Text;
using System.Windows;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication1
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Excel.Application oXL;
            Excel._Workbook oWB;
	        Excel._Worksheet oSheet;
            oXL = new Excel.Application();
            oWB = (Excel._Workbook)(oXL.Workbooks.Add());
            oSheet = (Excel._Worksheet)oWB.ActiveSheet;
            StringBuilder sb = new StringBuilder();
            for (int i = 1; i <= 36000; i++)
            {
                sb.AppendFormat("{0}\t\t\t\t\t{1}\r\n", i, "Тра-ла-ла");
            }

            System.Windows.Forms.Clipboard.SetText(sb.ToString());
           
            oSheet.Cells[1, 1].PasteSpecial();
            oXL.Visible = true;
            oSheet = null;
            oWB = null;
            oXL = null;
        }
    }
}



PS. Материться не надо, нервные клетки не восстанавливаются...
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# / Excell 16000 строк / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]