Шаблон Excel для счета-фактуры
Моя идея состояла в том, чтобы позволить конечному пользователю открыть excel и создать шаблон для счета-фактуры. После этого я бы ему сейчас сказал, что для столбца "название статьи" ему нужно поставить в диспетчере имен название столбца "NameArticle" и ссылаться на этот столбец и так далее для других столбцов.
После этого с помощью цикла я бы читал из своих sql-данных и заполнял данные в Excel по этим шаблонам.
У меня есть одно решение, где это в настоящее время работает, но оно ужасно медленное, поэтому я решил бросить его и поискать другое решение.
Конец.
Я попытался перевести код с моего родного языка, чтобы быть более понимающим для вас
Что я уже пробовал:
Мое решение шло примерно так.
Заполните класс именем свойства и значением свойства
Подготовьте ряды
For j = 1 To bsItems.Count - 1 For i = 1 To numberOfRowsPerItem xlSheet.Rows(endRow).Insert Next i Next j
После этого я скопирую сформированные ячейки
For j = 1 To bsItems.Count - 1 For i = 1 To numberOfRowsPerItem xlSheet.Rows(ItemStartRow + i).Copy xlSheet.Rows(ItemStartRow + (j * numberOfRowsPerItem) + i).PasteSpecial Next i Next j
И заполнить значения
For j = 1 To bsItems.Count For i = 1 To UsedParameters.Count cParametar = UsedParameters(i) MyPos.ExcelPos = xlBook.Names(cParametar).RefersTo DataRow= MyPos.Row+ (j * numberOfRowsPerItem) DataColumn= MyPos.Column If ParameterExists(cParametar) = True Then cValue= bsItems.Item(j).Item(cParametar).ValueOfItem cTekst = xlSheet.Cells(DataRow, DataColumn) cTekst = PrepareAndFormatCell(cTekst, cVrijednost) cNumFormat = xlSheet.Cells(DataRow, DataColumn).NumberFormat If InStr(1, cNumFormat, "0.00") <> 0 Then xlSheet.Cells(DataRow, DataColumn) = CDbl(cTekst) Else xlSheet.Cells(DataRow, DataColumn) = cTekst End If End If Next i Next j
Ralf Meier
В основном, если вы работаете с Excel, вы делаете своего рода дистанционное управление Excel-так что ... извините ... это немного медленно ...
Но в чем же теперь ваш вопрос ?
Member 12859472
Я хочу создать шаблон Excel для счета-фактуры, где я помещу свой верхний колонтитул компании, а также назову свои столбцы так, как я хочу. Ваша программа должна быть в состоянии заполнить это в этот шаблон Excel
Ralf Meier
Я понял - но когда я вижу ваш код, вы уже делаете это ...
Member 12859472
Медленный :(
Ralf Meier
Это может быть немного быстрее, если вы создадите свой шаблон-лист как *. xlsm (с VB-makro в нем) и передадите данные макро из вашего приложения, и макро заполнит лист ...
Member 12859472
Это кажется отличной идеей. Прежде чем я начну делать/исследовать это с самого начала, может быть, у вас есть где-то пример этого ??
Заранее спасибо
Ralf Meier
прямо нет ... но я нашел (например) это для вас :
https://support.microsoft.com/en-us/help/153307/how-to-call-microsoft-excel-macros-that-take-parameters
Ralf Meier
Пример работает со строкой и целым числом - но в целом вы можете использовать каждый тип, который является общим для .Net и VBScript (String-Array, Integer-Array ...)
Ralf Meier
Вы продвинулись еще на шаг ?
Member 12859472
Мой сотрудник не принимает это решение. Он хочет ускорить код выше :S
Ralf Meier
Как я уже писал ранее : скорость не исходит от вашего приложения (и никогда не придет). Скорость достигается только за счет дистанционного управления самим Excel.
Знаком ли ваш сотрудник с существующими проблемами ? Иногда приказ приходит без знания окружающей обстановки и возможных обстоятельств ...
В данный момент я не знаю, как вам помочь. Было бы легче, если бы вы совершили ошибку, но вы этого не сделали. Возможно, вы могли бы изменить команды-но результат будет тот же ...