Aktualna wersja: 19.08.21


Dodawanie do Arkusza własnych rozszerzeń DLL wykonanych w Visual Studio

Arkusz Kalkulacyjny zintegrowany z Program-JPK PRO możemy rozbudowywać o własne rozszerzenia za pomocą wbudowanego API, które pozwala na pełną interakcję ze skoroszytami Excel XLS (XLSX). Do arkusza można dodawać elementy graficzne poprzez rozbudowę standardowego Menu, oraz cztery aktywne panele z zadokowanymi kontrolkami. Arkusz posiada również mechanizm dodawania własnych funkcji użytkownika. Wszystkie wspomniane rozszerzenia można budować wprost w API naszej aplikacji (program posiada wizualny edytor do tworzenia formatek) lub w połączeniu z kodem i elementami graficznymi zewnętrznych bibliotek .NET.

W przykładzie utworzymy własną bibliotekę za pomocą VS.NET, która zawiera trzy elementy: Formę, Kontrolkę użytkownika oraz Klasę z publicznymi funkcjami statycznymi.

Poniżej zaprezentowano zdjęcia z projektu wykonanego za pomocą Visual Studio, który służy do utworzenia biblioteki własnych klas wykorzystanych w przykładzie połączenia Program-JPK PRO, API i zewnętrznymi rozszerzeniami .NET


Rozbudowa Excel za pomocą API, funkcje użytkownika i Formy

Definicja formy (okna dialogowego), która zostanie wykorzystana do wprowadzenia podanych danych użytkownika do komórek arkusza, po naciśnięciu nowego przycisku dodanego do Menu/Arkusza.



Rozbudowa Excel za pomocą API, funkcje użytkownika i Formy

Definicja kontrolki użytkownika, która zostanie dodana do nowego Lewego Panelu Arkusza.



Rozbudowa Excel za pomocą API, funkcje użytkownika i Formy

Własny kod C# definicji kontrolki, która będzie zadokowana w Lewym Panelu.

Publiczne pola Button1 i Button2 pozwolą na interakcję Arkusza z elementami kontrolki. Po naciśnięciu pierwszego przycisku inicjujemy publiczne pole Kontrahent wartością „obliczoną” przez kod biblioteki użytkownika. Posłuży nam to jako przykład „wstrzykiwania” wartości obliczanych przez bibliotekę do komórek Arkusza. W rzeczywistym projekcie wartości mogą być obliczane na podstawie danych własnego systemu ERP i pobierane z bazy danych SQL.



Rozbudowa Excel za pomocą API, funkcje użytkownika i Formy

Do Arkusza można dodawać własne Funkcje Użytkownika, które wykorzystujemy w komórkach Arkusza na równi z funkcjami standardowymi. Funkcje można definiować wprost w API lub w połączeniu z zewnętrznymi bibliotekami.

W przykładzie mamy dwie publiczne statyczne funkcje, które zwracają wartości obliczone przez bibliotekę. Funkcje mogą mieć dowolną liczbę parametrów.



Rozbudowa Excel za pomocą API, funkcje użytkownika i Formy

Własne biblioteki należy dodać w Menu/JPK-PRO/Rozszerzenia DLL.

Można dodać kilka bibliotek, każdą w oddzielnej linii. Wszystkie biblioteki własnego projektu (projektów) należy skopiować do głównego katalogu aplikacji Program-JPK.

UWAGA! Jeżeli korzystasz z bibliotek narzędziowych innych firm, takich samych jak TGSoft, to należy uważać na wersje bibliotek DLL o takich samych nazwach (jak w aplikacji TGSoft). Nie wolno zmienić (zastąpić) bibliotek na inne wersje.



Poniżej zaprezentowano kod C# integracji w API oraz film VIDEO, który demonstruje pełną interaktywność naszego rozwiązania.


namespace Szark
{
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using DevExpress.Spreadsheet;
    using TGSoft.UI.XLS;

    public partial class Form1 : DevExpress.XtraEditors.XtraForm
    {

        public Form1(SSController sender)
        {
            this.InitializeComponent();
            using (var dlg = new MyClassLibrary2.Form1())
            {
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    sender.ActiveCell.Value = dlg.MyText;
                }
            }            
        }

        public void Main()
        {
        }
    }
}        

Obsługa przycisku dodanego do głównego Menu Arkusza. Po naciśnięciu otwierana jest forma zdefiniowana w zewnętrznej bibliotece oraz wpisywanie tekstu z formy do bieżącej komórki arkusza.


namespace Szark
{
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using DevExpress.Spreadsheet;
    using TGSoft.UI.XLS;

    public partial class Form1 : DevExpress.XtraEditors.XtraForm
    {
        private SSController ssc;
        private MyClassLibrary2.UserControl1 uc;

        public Form1(SSController sender)
        {
            this.InitializeComponent();
            ssc = sender;
            uc = new MyClassLibrary2.UserControl1() { Parent = this, Dock = DockStyle.Fill };
            uc.Button1.Click += button1_Click;
            uc.Button2.Click += button2_Click;
        }
        
        public void Main()
        {
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            ssc.ActiveWorksheet.Cells["A1"].Value = uc.Kontrahent;
        }
        
        private void button2_Click(object sender, EventArgs e)
        {
            ssc.BeginUpdate();
            for (int i = 1; i < 10; i++)
            {
                ssc.ActiveWorksheet.Cells[i, 0].Value = i * 100;
            }
            ssc.EndUpdate();
        }
    }
}        

Obsługa kontrolki użytkownika zadokowanej w lewym panelu. Dodajemy obsługę zdarzeń do przycisków Button1 oraz Button2 zdefiniowanych w bibliotece DLL. Pierwszy przycisk wstawia do arkusza wartość obliczoną w zewnętrznej bibliotece (pole Kontrahent), drugi wartości liczbowe obliczane bezpośrednio w API.


using System;
using System.Data;
using System.Drawing;
using DevExpress.Spreadsheet;
using TGSoft.UI.XLS;
using TGSoft.Utils;

namespace Szark
{
    public class CustomFunctions
    {
        public CustomFunctions(SSController sender)
        {
        }
        
        public string NazwaK()
        {
            return MyClassLibrary2.Class1.NazwaKontrahenta().ToLower() + " !!!";
        }
        
        public double SXY(double x, double y)
        {
            return MyClassLibrary2.Class1.SumaXY(x, y) *1.5;
        }
    }
}        

Kod C# wykorzystany do definicji funkcji użytkownika. Funkcje będzie można stosować bezpośrednio w komórkach arkusza.


Poniżej film prezentujący opisywaną integrację. Proszę zwrócić uwagę na pełną interaktywność naszego rozwiązania i pełną komunikację edytowanego kodu oraz automatyczną reakcję Arkusza kalkulacyjnego na dodawane polecenia.