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

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.

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

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.

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.

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.