|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Скажите пожалуйста, возможно ли данные из DataTable писать в Excel не в цикле, а записать сразу целиком массив, указав левую верхнюю и правую нижнюю границу? Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 14:34 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Каким образом ты взаимодействуешь с документом Эксель? Если через Interop - по идее можешь тупо в Range вставить массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 14:40 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
vah, чем цикл не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 17:51 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
vah, Сериализуй таблицу в формате ехцел-документа. Сам - не делал, обхожусь писанием заголовков и дампом ЦСВ. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 20:31 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Range.Value = array, и нет вопросов. Главное, чтобы размеры Range и array совпадали. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 22:16 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
vb_subvah, чем цикл не устраивает?тормозами ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 22:17 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Лень проверять, но... Если поставить макрос на запись, выделить таблицу, вырезать, а потом также куда-то вставить, то не получим код, нужный ТС? Вроде все уже должны знать, что следует использовать Range и если что не понятно, то записывай макрос и смотри. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 23:48 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
skyANAто не получим код, нужный ТС?Нет. Получим код, который портит буфер обмена. ТС не это нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 00:36 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Ado recordset копируется в excel - CopyFromRecordset datatable в adodb recordset перегнать ессно нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 00:58 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Shocker.ProskyANAто не получим код, нужный ТС?Нет. Получим код, который портит буфер обмена. ТС не это нужно То есть код вставки не получим, точно? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 07:43 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Ладно, фиг с ним, stackoverflow: https://stackoverflow.com/questions/536636/write-array-to-excel-range Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
dt - это DataTable По ссылке и про CopyFromRecordset есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 07:50 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
skyANAТо есть код вставки не получим, точно?мы получим код вставки Range из буфера обмена. Код вставки массива из памяти мы не получим - это разные операции. Массив можно вставить напрямую, тащить его в буфер обмена совсем не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 11:22 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Antonariy, тормозами ----- Тормоза на экстрагировании данных из таблицы или тормоза на вставке в Ехцел? Думаю - Ехцел - там медленные олешные вызовы. Попробуй исключить навигацию по колонкам - у DataRow есть ItemArray - обычно этого достаточно для повышения производительности. В примере приведенном skyANA можно исключить второй цикл и вставлять построчно. Плюс, итератор по строкам должен быть быстрее индексатора по целому - там не массив, а дерево. Есть еще один хитро выпернытый способ. В ВБА таблица представляется как полностью плоская. Т.е. доступно dt[i,k]. В этом случае не нужно писать свои циклы, а можно задать Range() и присвоить range.Value = dt; Какие именно библиотеки надо цеплять - не помню, но в басиковских аппах можно поискать. Да, кстати, а почему бы просто не унаследоваться от DataTable и не написать свой двумерный indexer? Для ехцеловского импортера его должно хватить... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 12:32 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
PinkCatДумаю - Ехцел - там медленные олешные вызовы. именно поэтому нужно не циклы крутить, а вставку одним вызовом делать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 12:40 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
PinkCatтам медленные олешные вызовы.сам по себе Ole server имеет насколько помню вставку пачкой. Какой тип не помню, но вроде было а API. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 12:47 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
В цикле сильно быстрее, если отменить автопересчет книги и еще немного всего (по материалам хабра, код VBA). Потом все вернуть на место Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 12:55 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
Изопропил, именно поэтому нужно не циклы крутить, а вставку одним вызовом делать ----- Вставку одним вызовом можно делать по-разному. Все, что требуется в данном случае - дать Ехцелу что-то работающее как двумерный массив... В смысле - не обязательно формировать сам массив... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 13:18 |
|
C# Array to Excel
|
|||
---|---|---|---|
#18+
skyANAЛадно, фиг с ним, stackoverflow: https://stackoverflow.com/questions/536636/write-array-to-excel-range Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Да, пока не забыл... Как-то натолкнулся у мелкомягких в их коде на конструкцию с запоминанием DataColumn. Сначала не понял зачем такие сложности, потом потестил на предмет времени доступа. Индексация DataRow посредством DataColumn оказалась самой быстрой. Так что пример правильнее писать как: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Можно так же вспомнить, что двумерные массивы в шарпе двух типов и - [,] - является одной сплошной областью и избавится от одного индекса - ехцелу должно быть без разницы. Но тестить надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2019, 13:54 |
|
|
start [/forum/topic.php?fid=20&msg=39782450&tid=1399065]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
127ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 231ms |
0 / 0 |