powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# / Excell 16000 строк
20 сообщений из 20, страница 1 из 1
c# / Excell 16000 строк
    #38606740
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из 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
c# / Excell 16000 строк
    #38606752
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38606785
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И что ты этим хотел сказать?
Worksheet size 1,048,576 rows
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38606819
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xKIA,

А какое количество столбцов в TrgRange?
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38606917
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
16000 позволяет записать 16001 выдаёт ошибку. По моему, в 2003 такое ограничение было. В теории, документ и в 2007 может быть создан в режиме совместимости с более старыми версиями (документ новый создаётся никаких файлов не открывается), но я не вижу нигде признаков, что это не 2007 (смотрел в отладке объект).
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38606921
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сори не понял сразу вопроса, столбцов 7
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38606949
igr_ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xKIA16000 позволяет записать 16001 выдаёт ошибку.Текст ошибки в студию
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38606984
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исключение из HRESULT: 0x800A03EC
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38607148
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38607991
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К разделителям это не имеет отношения, диапазон тоже один, никаких формул в данном случае тоже не вставляется, тупые данные.
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38608033
igr_ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xKIA,

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

Нет, культура потока 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
c# / Excell 16000 строк
    #38608448
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шедеврально.
Особенно позабавило вот это:
Код: 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
c# / Excell 16000 строк
    #38608505
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это отладка. на 1600 строке рейндж запишется, на 16001 нет
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38608509
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И насколько я понимаю, рейндж перезаписывается в тот же диапазон
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38608520
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кто-то всё ещё не понимает, объясняю ещё раз: запись в эксель работает, можно даже записать формулы, но при ТУПОЙ записи без всяких формул (на которые влияет запятая там или точка с запятой, на что влияет локаль) можно записть только 16000 строк. МОЖНО ЗАПИСАТЬ. Sucessful Понятно?
При записи рейнджа 16001 строк и больше вываливается с ОШИБКОЙ. КАК ещё обяснять, б##ть!!!
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38608601
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашлась ошибка, посыпаю голову пеплом.
Но это надо просто фантастическое невезение: документ формируется по данным, которые часто изменяются и строки каждый раз разные, но это же надо было, что бы во время отладки ошибочная строка была именно 16001.
Какой-то урод назвал контрагента:
=========тра-ля-ля===========

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

http://globalscience.ru/article/read/23589/
...
Рейтинг: 0 / 0
c# / Excell 16000 строк
    #38608653
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# / Excell 16000 строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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