/ / Зареждане на големи количества данни от .NET обект в Excel - .net, excel, vba

Зареждане на големи количества данни от .NET обект в Excel - .net, excel, vba

Работя върху приложение за база данни, което използва Excel като свой интерфейс. По същество това е макрос на Excel, който се свързва с база данни чрез .NET библиотека.

Основният проблем е, че клиентите трябва да бъдатможе да управлява огромни количества данни (5000-20000 реда и около 160 колони). Успях да минимизирам закъсненията както за достъпа до базата данни, така и чрез зареждане на цялата част от данните като низове директно в обхвата на електронната таблица .Value свойство (форматирано като низ [,]). Беше бързо, лесно и ефективно.

Но сега клиентът се нуждае от поддръжка за Excel формати. Тъй като в, имам нужда от Excel, за да разпознавам дати като такива, числа като такива и т.н. Това, докато поддържа неравномерни типове данни: колона с дата биха могли, може съдържат формат на дата, но може и да включва текст или нещо друго.

Опитах няколко подхода:-Продължете да зареждате низовете като такива, като предварително форматирате колоната според нейния очакван тип дата (ws.range (range.EntireColumn.Address) .NumberFormat = "0", например). Не работи. -Натоварете целия парче, както обикновено, и след това принудете Excel да презареди колоните с нетекстови типове данни, като пренастроите целия ред:

With ws.range(ws.Cells(4, 11), ws.Cells(ws.UsedRange.rows.Count, 11))
.NumberFormat = "dd/mm/yyyy"
.Value = .Value
End With

Но това започва да бъде доста бавно, когато трябва да преформатирам 30 колони в документ с около 7000 реда или така.

-Накрая, опитах се да модифицирам функцията, така че тя да създава обект [,] масив, с елементите в правилните му типове данни (datetime, int и т.н.). Отново, Excel е ужасно бавен при разопаковането на общ обект.

Единственото ми предположение е, че бих могъл да заредя парчетата по тип данни, но това ужасява ужасно с настоящите ми методи.

Има ли алтернатива или да се увеличи скоростта, или да се намали трансформацията?

Благодаря предварително.

РЕДАКТИРАНЕ:

Да се ​​изяснят:Excel действа като тежък клиент, който позволява на няколко потребители (всеки със собствен Excel) да четат и актуализират отдалечена база данни. Най-големият проблем всъщност беше справянето със заключване на таблици за едновременно писане и други подобни. Проблемът сега е, че количеството данни става толкова голямо, че трябва да направя нещо, за да ускоря времето за импортиране и експортиране. Вече направих поносимото време за експортиране (през повечето време потребителите не качват толкова данни в базата данни), но времето за импортиране е бавно и основното препятствие се записва в електронната таблица.

Освен това потребителите вече са свикналиподобен инструмент, който те използваха от друга компания, преди да вляза, така че са много категорични да запазят същия формат. Това приложение изпраща заявка до уеб услуга, от която изтегля CSV с информацията. След това зарежда този CSV като източник на данни в Excel. Този подход не е валиден за мен, защото нямам административен достъп до машината, където е DB, нито друг, който мога да използвам като мост за WS. Имам само административни привилегии към самата база данни. Предполагам, че може да изгради CSV от заявените данни в dll и след това да използва същия подход като тях.

Отговори:

0 за отговор № 1

Ако искаш създаване на форматирани файлове с данни на Excel във вашия .NET код, това е списък с популярни библиотеки, които могат да го направят:

и статия Създайте файл от Excel (.XLS и .XLSX) от C # има по-дълго обсъждане на различни опции

Ако искаш актуализирайте отдалечена база данни от Excel VBA код след това статия VBA код за цикъл и актуализиране на колоната за база данни за достъп на MS от Excel и тази заявка от Google: "сайт: stackoverflow.com excel vba база данни за актуализация"

Ако искаш невидимо отворете файл с данни на Excel създаден от вашия .NET backend за по-нататъшна обработка / обединяване след това статия Отворете Excel файл за четене с VBA без дисплей има няколко съвета как можете да го направите

Ако искаш получавайте по-добри отговори от повече хора след това се опитайте ясно да стесните проблема до един ясен въпрос (https://stackoverflow.com/help/how-to-ask) и също така предоставят някакъв код под формата на Минимален, пълен и подлежащ на проверка пример