Member 12859472 Ответов: 0

Шаблон 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.
Знаком ли ваш сотрудник с существующими проблемами ? Иногда приказ приходит без знания окружающей обстановки и возможных обстоятельств ...

В данный момент я не знаю, как вам помочь. Было бы легче, если бы вы совершили ошибку, но вы этого не сделали. Возможно, вы могли бы изменить команды-но результат будет тот же ...

0 Ответов