Quick Start
Add Intechcore repository's creds to the maven's settings.xml (by default this file is in <your_home_dir>/.m2/settings.xml)
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>intechcore-demo</id>
<username>given_username</username>
<password>given_password</password>
</server>
</servers>
</settings>
(if there's no file, create it and place all the content above)
Add the SCell Public API dependencies to the POM (api-interfaces-ui
and api-impl-ui
in case you need UI spreadsheet control):
...
<repositories>
<repository>
<id>intechcore-demo</id>
<name>scalable components demo</name>
<url>https://nexus.intechcore.online/repository/maven-scomponents-demo</url>
</repository>
</repositories>
...
<dependencies>
...
<dependency>
<groupId>com.intechcore.scomponents.scell</groupId>
<artifactId>api-interfaces-core</artifactId>
<version>1.0.3-java11</version>
</dependency>
<dependency>
<groupId>com.intechcore.scomponents.scell</groupId>
<artifactId>api-impl-core</artifactId>
<version>1.0.3-java11</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.intechcore.scomponents.scell</groupId>
<artifactId>api-interfaces-ui</artifactId>
<version>1.0.3-java11</version>
</dependency>
<dependency>
<groupId>com.intechcore.scomponents.scell</groupId>
<artifactId>api-impl-ui</artifactId>
<version>1.0.3-java11</version>
<scope>runtime</scope>
</dependency>
...
</dependencies>
...
- set your java version with
-java8
or-java11
ATTENTION! Scope runtime
is required!
Console application example:
import com.intechcore.scomponents.scell.api.IScellApiResolver;
import com.intechcore.scomponents.scell.api.ScellApiEntryPoint;
import com.intechcore.scomponents.scell.api.spreadsheet.IScellCoreApiFactory;
import com.intechcore.scomponents.scell.api.spreadsheet.model.IWorkbook;
import java.io.File;
import java.util.concurrent.CompletableFuture;
public class TestApp {
private static final CompletableFuture<IScellApiResolver> apiResolverFuture
= ScellApiEntryPoint.getApiResolverAsync();
public static void main(String[] args) {
apiResolverFuture.thenAccept(resolver -> {
IScellCoreApiFactory apiFactory = resolver.resolve(IScellCoreApiFactory.class);
IWorkbook newWorkbook = apiFactory.createNew();
IWorkbook existingWorkbook = apiFactory.load(new File("/path/to/existing/file.xlsx"));
// ...
}).whenComplete((unused, throwable) -> {
if (throwable != null) {
System.out.println(throwable.getMessage());
}
}).join();
}
}
The call ScellApiEntryPoint.getApiResolverAsync()
return the IScellApiResolver
implementation which will be used to resolve API entry points or register custom implementation of API interfaces.
IScellCoreApiFactory
creates the main API object - IWorkbook
, by creating a new empty spreadsheet or loading an existing one to further work.
UI Java FX application example
import com.intechcore.scomponents.scell.api.ScellApiEntryPoint;
import com.intechcore.scomponents.scell.api.spreadsheet.IScellCoreApiFactory;
import com.intechcore.scomponents.scell.api.fx.IScellUiApi;
import com.intechcore.scomponents.scell.api.fx.IScellUiApiBuilder;
import com.intechcore.scomponents.scell.api.fx.IScellUiFxApiBuilder;
import com.intechcore.scomponents.scell.api.fx.model.ContextMenuOwner;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.util.concurrent.CompletableFuture;
public class TestAppUi extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane(new Label("Initializing ..."));
ScellApiEntryPoint.getApiResolverAsync().thenApplyAsync(resolver -> {
IScellCoreApiFactory apiFactory = resolver.resolve(IScellCoreApiFactory.class);
IScellUiApiBuilder<Node> uiBuilder = resolver.resolve(IScellUiFxApiBuilder.class);
IScellUiApi<Node> uiApi = uiBuilder
.enableContextMenu(ContextMenuOwner.EDITING_CELL, false)
.create(CompletableFuture.supplyAsync(apiFactory::createNew));
return uiApi.createControl();
}, Platform::runLater).whenCompleteAsync((node, throwable) -> {
if (throwable != null) {
node = new Label("Failed to init: " + throwable.getCause().getMessage());
}
root.setCenter(node);
}, Platform::runLater);
primaryStage.setScene(new Scene(root, 800, 600));
primaryStage.show();
}
}
To create the Java FX API entry point you need the implementation of IScellUiApiBuilder<Node>
(or its alias IScellUiFxApiBuilder) and CompletableFuture of IWorkbook
interface.
Adding content to cells and save workbook to file example
import com.intechcore.scomponents.scell.api.IScellApiResolver;
import com.intechcore.scomponents.scell.api.ScellApiEntryPoint;
import com.intechcore.scomponents.scell.api.spreadsheet.IScellCoreApiFactory;
import com.intechcore.scomponents.scell.api.spreadsheet.model.IWorkbook;
import com.intechcore.scomponents.scell.api.spreadsheet.service.builder.IRangeAddressBuilder;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.stream.IntStream;
public class FillExample {
private static final CompletableFuture<IScellApiResolver> apiResolverFuture = ScellApiEntryPoint.getApiResolverAsync();
public static void main(String[] args) {
apiResolverFuture.thenAccept(resolver -> {
IScellCoreApiFactory apiProvider = resolver.resolve(IScellCoreApiFactory.class);
IWorkbook workbook = apiProvider.createNew();
IRangeAddressBuilder addressBuilder = resolver.resolve(IRangeAddressBuilder.class);
workbook.all().findFirst().ifPresent(worksheet -> {
worksheet.inputContent(
addressBuilder.setTopLeft(1, 2).buildCell(),
"Date");
worksheet.inputContent(
addressBuilder.setTopLeft(1, 3).buildCell(),
"Signature");
Random random = new Random();
IntStream.range(2, 40).forEach(rowNumber -> {
int columnNumber = 2;
worksheet.inputContent(
addressBuilder.setTopLeft(rowNumber, columnNumber++).buildCell(),
UUID.randomUUID().toString());
worksheet.inputContent(
addressBuilder.setTopLeft(rowNumber, columnNumber++).buildCell(),
UUID.randomUUID().toString());
});
});
workbook.getWriter().fileName("fillExample").save();
}).whenComplete((unused, throwable) -> {
if (throwable != null) {
System.out.println(throwable.getMessage());
}
}).join();
}
}