Generate and read big Excel files quickly

Overview

fastexcel

Build Status Coverage Status Maven Central Javadocs

fastexcel-writer

There are not many alternatives when you have to generate xlsx Excel workbooks in Java. The most popular one (Apache POI) includes many features, but when it comes down to huge worksheets it quickly becomes a memory hog.

Its streaming API may mitigate this problem but it introduces several limitations:

  • Its sliding window mechanism prevents you from accessing cells above the current writing position.
  • It writes stuff to a temporary file.
  • It comes with an overhead on the file size because shared strings are disabled by default. Enabling shared strings is likely to consume much more heap if you deal with string values.

So, fastexcel has been created to offer an alternative with the following key points:

  • Limited set of features (basic style support, no graph support yet) and very simple API.
  • Reduced memory footprint and high performance by accumulating only necessary elements. XML stuff is piped to the output stream at the end.
  • Multithreading support: each worksheet in the workbook can be generated by a different thread, while fully supporting shared strings and styles.

Benchmark

In this simple benchmark test, we generate a workbook with a single worksheet containing 100,000 rows and 4 columns. Apache POI (non-streaming) is about 10 times slower than fastexcel and uses 12 times more heap memory. The streaming API of Apache POI is almost on par with fastexcel in terms of performance and uses less heap just because it keeps only 100 rows in memory: see related limitations in the paragraph above.

Generation time

Heap memory usage

Note heap memory usage is measured just before flushing the workbook to the output stream.

Prerequisites

  • Java 8+. Build with Maven.
  • Include the following dependency in your POM:
<dependency>
    <groupId>org.dhatim</groupId>
    <artifactId>fastexcel</artifactId>
    <version>0.12.13</version>
</dependency>

Examples

The javadoc for the last release is available here.

Simple workbook

Create a workbook with a single worksheet and a few cells with the different supported data types.

try (OutputStream os = ...) {
    Workbook wb = new Workbook(os, "MyApplication", "1.0");
    Worksheet ws = wb.newWorksheet("Sheet 1");
    ws.value(0, 0, "This is a string in A1");
    ws.value(0, 1, new Date());
    ws.value(0, 2, 1234);
    ws.value(0, 3, 123456L);
    ws.value(0, 4, 1.234);
    wb.finish();
}

Styles and formatting

Change cell style to bold with a predefined fill pattern:

ws.style(0, 0).bold().fill(Fill.GRAY125).set();

Apply formatting to a cell containing a timestamp:

ws.value(0, 0, LocalDateTime.now());
ws.style(0, 0).format("yyyy-MM-dd H:mm:ss").set();

Cell ranges

Set style on a range of cells:

ws.range(0, 0, 10, 10).style().horizontalAlignment("center").italic().set();

Merge cells:

ws.range(0, 0, 10, 10).merge();

Shade alternate rows:

ws.range(0, 0, 10, 10).style().shadeAlternateRows(Color.GRAY2).set();

or shade every Nth row (e.g. every 5th):

ws.range(0, 0, 10, 10).style().shadeRows(Color.GRAY2, 5).set();

Name a cell range (name of a cell range can only include letters, numbers and underscore):

ws.range(0, 0, 0, 10).setName("header");

Formulas

Note the cells with a formula do not have a value in the generated workbook.

ws.formula(10, 0, "SUM(A1:A10)");
// With Range.toString():
ws.formula(10, 0, "SUM(" + ws.range(0, 0, 9, 0).toString() + ")");

Additional worksheet features

To keep the sheet in active tab:

ws.keepInActiveTab();

Set page orientation (visible in print preview mode):

ws.pageOrientation("landscape");

Set bottom, top, left, or right margin:

ws.leftMargin(0.3);
ws.bottomMargin(0.2);

Create a freeze pane (some rows and columns will be kept still while scrolling).
To freeze the first column on the left and the top three rows:

ws.freezePane(1, 3);

Define repeating rows or columns for the print setup.

ws.repeatRows(0, 4); // keep first top 5 rows on each page when printing.
ws.repeatRows(2); // keep the third row on each page when printing.

ws.repeatCols(0, 2); // repeat first three columns (A to C) on each page when printing.
ws.repeatCols(0); // repeat only first column (A) on each page for the print setup.

Set header and footer content.
To set page enumeration in the top right:

ws.header("page 1 of ?", Position.RIGHT);

To set custom text in the footer (bottom left):

ws.footer("Generated with Fastexcel", Position.LEFT, "Arial", 10);

To provide sheetname in the bottom central position:

ws.footer("sheetname", Position.CENTER, 8);

To set firstPageNumber to 2 (default is 0):

ws.firstPageNumber(2);

To remove any cell background color or font color for the print setup: (this does not apply to printer color settings, only removes any colored rows etc. - see in print preview)

ws.printInBlackAndWhite();

To revert back the colors for the print setup:

ws.printInColor();

To set the scaling factor to 60 % for the print setup:

ws.pageScale(60);

To enable autoPageBreaks:

ws.setAutoPageBreaks(true);

To set fitToPage:

ws.setFitToPage(true);

To set fitToWidth to 2 pages with unlimited number of rows:

ws.setFitToPage(true);
ws.fitToWidth(2);
ws.fitToHeight(999);

Multithreaded generation

Each worksheet is generated by a different thread.

try (OutputStream os = ...) {
    Workbook wb = new Workbook(os, "MyApplication", "1.0");
    Worksheet ws1 = wb.newWorksheet("Sheet 1");
    Worksheet ws2 = wb.newWorksheet("Sheet 2");
    CompletableFuture<Void> cf1 = CompletableFuture.runAsync(() -> {
        // Fill worksheet 1
        ...
    });
    CompletableFuture<Void> cf2 = CompletableFuture.runAsync(() -> {
        // Fill worksheet 2
        ...
    });
    CompletableFuture.allOf(cf1, cf2).get();
    wb.finish();
}

fastexcel-reader

The reader part of fastexcel is a streaming alternative of Apache POI. It only reads cell content. It discards styles, graphs, and many other stuff. The API is simplier than streaming API of Apache POI.

Benchmarks

In this simple benchmark test, we read a workbook of 65536 lines. We see that Apache Poi (non-streaming) is about 10x times slower than fastexcel read. The streaming API of Apache POI is about 2x times slower. In between there a more developer friendly wrapper around Apache Poi called Excel Streaming Reader (xlsx-streamer).

Reading time

Prerequisites

  • Java 8+. Build with Maven.
  • Include the following dependency in your POM:
<dependency>
    <groupId>org.dhatim</groupId>
    <artifactId>fastexcel-reader</artifactId>
    <version>0.12.3</version>
</dependency>

Examples

Simple reading

Open a workbook and read all rows in a streaming way.

try (InputStream is = ...; ReadableWorkbook wb = new ReadableWorkbook(is)) {
    Sheet sheet = wb.getFirstSheet();
    try (Stream<Row> rows = sheet.openStream()) {
        rows.forEach(r -> {
            BigDecimal num = r.getCellAsNumber(0).orElse(null);
            String str = r.getCellAsString(1).orElse(null);
            LocalDateTime date = r.getCellAsDate(2).orElse(null);
        });
    }
}

You can read all rows to a list with:

List<Row> rows = sheet.read();

Iterate on row to get all cells.

Row row = ...;
row.forEach(cell -> {
    ...
});
Comments
  • Null pointer Exception in (org.dhatim.fastexcel.reader.Sheet) sheet).openStream()

    Null pointer Exception in (org.dhatim.fastexcel.reader.Sheet) sheet).openStream()

    When try to open stream getting null pointer exception in XSSFReader of PackageRelationship rel = workbookPart.getRelationship(relId); line number 174

    opened by SujathaThazhal 12
  • Bug parsing Dates?

    Bug parsing Dates?

    I'm having trouble reading dates from excel file. FastExcel doesn't recognize DATE type fields so it parses them as NUMBER instead and gives me something like 40333. I don't have this problem with Apache POI.

    opened by ThanosFisherman 7
  • Continuously stream rows

    Continuously stream rows

    I started using this library because I thought that it continuously streamed values to the OutputStream passed to the Workbook instance. This doesn't seem to be the case, rather it accumulates all data in memory and when calling ws.finish() everything is written to the OutputStream. I'm sure that this is intended behavior but when you're working with a huge set of rows you don't want to keep everything in memory and rather just pipe it to the output stream directly. Would this be out of scope for the project?

    enhancement 
    opened by johanhaleby 6
  • fully streaming reader

    fully streaming reader

    Currently new ReadableWorksheet(InputStream) will read the whole uncompressed xml data into memory. This is how OPCPackage.open(InputStream) works.

    It would be great to make fastexcel-reader be able to stream rows as it reads the input stream.

    Usually the order of xml files in the xlsx archive is as follows:

    -rw----     2.0 fat      571 bl defN 17-Aug-16 12:30 _rels/.rels
    -rw----     2.0 fat      271 bl defN 17-Aug-16 12:30 docProps/app.xml
    -rw----     2.0 fat      588 bl defN 17-Aug-16 12:30 docProps/core.xml
    -rw----     2.0 fat      549 bl defN 17-Aug-16 12:30 xl/_rels/workbook.xml.rels
    -rw----     2.0 fat     2725 bl defN 17-Aug-16 12:30 xl/sharedStrings.xml
    -rw----     2.0 fat    43085 bl defN 17-Aug-16 12:30 xl/worksheets/sheet1.xml
    -rw----     2.0 fat     5637 bl defN 17-Aug-16 12:30 xl/styles.xml
    -rw----     2.0 fat      716 bl defN 17-Aug-16 12:30 xl/workbook.xml
    -rw----     2.0 fat     1111 bl defN 17-Aug-16 12:30 [Content_Types].xml
    

    This is great and would allow processing on the fly. The zip could be read using ZipInputStream. Shared string table would be created from sharedStrings.xml when it would be encountered. Then rows would be emitted to the user are they are read from sheet1.xml. In this mode accessing sheets would only be allowed in order in which they appear in the archive.

    There is one problematic case though. I have already came across an xlsx (saved from MS Excel) where xl/sharedStrings.xml appeared after xl/worksheets/sheet1.xml, like this:

    -rw----     2.0 fat      571 bl defN 17-Aug-16 12:30 _rels/.rels
    -rw----     2.0 fat      271 bl defN 17-Aug-16 12:30 docProps/app.xml
    -rw----     2.0 fat      588 bl defN 17-Aug-16 12:30 docProps/core.xml
    -rw----     2.0 fat      549 bl defN 17-Aug-16 12:30 xl/_rels/workbook.xml.rels
    -rw----     2.0 fat    43085 bl defN 17-Aug-16 12:30 xl/worksheets/sheet1.xml
    -rw----     2.0 fat     2725 bl defN 17-Aug-16 12:30 xl/sharedStrings.xml
    -rw----     2.0 fat     5637 bl defN 17-Aug-16 12:30 xl/styles.xml
    -rw----     2.0 fat      716 bl defN 17-Aug-16 12:30 xl/workbook.xml
    -rw----     2.0 fat     1111 bl defN 17-Aug-16 12:30 [Content_Types].xml
    

    I do hope xl/_rels/workbook.xml.rels always appear before sheet and sharedStrings. This would at least allow for detection of this case: If sharedString.xml is specified in rels and sheet.xml is encountered before sharedString in the zip. The only one solution that comes to my mind. Put aside the raw compressed sheet1.xml part of the input stream to temporary file. Then when sharedString.xml is read from input stream, resume uncompressing sheet1.xml and processing in on the fly then.

    Further possible optimizations:
    • Skip xlsx entries that we're not parsing anyway without uncompressing them (docProps/app.xml, xl/styles.xml)
    • Instead of saving compressed sheet.xml to temp file, start with putting is aside in memory. Then save to file only after some threshold is reached.
    • Fully skip sheets.xml that the user is not interested in. For example: Using InputStream source; The user asks for sheet3.xml (that is after name to id resolution). sheet1 and sheet2 are skipped, uncompressed when reading the InputStream. Only when sheet3.xml is encounted, it is processed and rows streamed to the users. Accessing sheet1 or sheet2 after that would be not possible.
    Simpler alternative:

    Load the whole InputStream (compressed xlsx) into memory. Then specific parts like sharedString.xml or sheet3.xml could be accessed using the zip's central directory that is located at the end of the archive. (see "Zip file structure" in https://rzymek.github.io/post/excel-zip64/). Maybe OPCPackage has a mode that works this way already. OPCPackage.open(ZipEntrySource)? If not, a contribution to OPCPackage might be a better place for improvement.

    What do you think?

    opened by rzymek 5
  • NumberFormatExpection on initial read of sheet

    NumberFormatExpection on initial read of sheet

    Hiya while trying to read a xlsx file, I'm immediately getting the following exception:

    For input string: "": java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:662) at java.base/java.lang.Integer.parseInt(Integer.java:770) at org.dhatim.fastexcel.reader.RowSpliterator.parseString(RowSpliterator.java:156) at org.dhatim.fastexcel.reader.RowSpliterator.parseCell(RowSpliterator.java:112) at org.dhatim.fastexcel.reader.RowSpliterator.next(RowSpliterator.java:94) at org.dhatim.fastexcel.reader.RowSpliterator.tryAdvance(RowSpliterator.java:47) at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:326) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at org.dhatim.fastexcel.reader.Sheet.read(Sheet.java:55)

    opened by LTielenRD 4
  • Is there any possibility bring image in fast-excel?

    Is there any possibility bring image in fast-excel?

    Hi, We are using fast-excel more often in our project. It is working faster than other plugin. But we can't include logo in excel cell. Will you bring this feature in future or no idea about it?

    Thanks

    opened by shajahan86 4
  • support for Worksheet.setPaperSize

    support for Worksheet.setPaperSize

    support for paper size. paper size enum is taken from here: https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.pagesetup?view=openxml-2.8.1

    opened by apptaro 3
  • Add Worksheet.values() batch function to the API

    Add Worksheet.values() batch function to the API

    For use-cases where rows are written sequentially, this avoids the overhead of resizing the cells array each time a new cell is added, as well as repeating all of the bounds checks for each cell.

    opened by akbertram 3
  • writer support for xlsx with sheets.xml over 4GB

    writer support for xlsx with sheets.xml over 4GB

    Excel requires specific ZIP flag values in .xlsx that Java's ZIP implementation does not provide when streaming.

    Use specific zip implementation tailored specifically to Excel. More info at: https://github.com/rzymek/opczip

    opened by rzymek 3
  • Add support for Worksheet DataValidations

    Add support for Worksheet DataValidations

    This PR provides a way to implement [DataValidation](https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/cc881341(v%3doffice.14) for aWorksheet.

    This adds a ListDataValidation for validating cells against a list. Other DataValidations can easily be implemented as necessary.

    opened by rodney757 3
  • Feature support setting properties

    Feature support setting properties

    Close #164 . Hi,@ochedru Perhaps this PR should not be merged immediately, and there is another issue worth discussing. If you have time, please carefully review lines 154~196 of the new file Properties.java added by this PR. It may not be appropriate to set fmtid to a fixed value , but it works fine so far, I haven't found a more formal way to set this value. Looking forward to your suggestions to optimize it.

    opened by meiMingle 2
  • How to read password protected Excel files

    How to read password protected Excel files

    If I read password protected Excel files, it is occur the exception "InvalidDataException".

    Is there any options to read password protected Excel files by the FastExcel?

    opened by neoamuro 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    This repository currently has no open or pending branches.

    Detected dependencies

    github-actions
    .github/workflows/build.yml
    • actions/checkout v3
    • actions/setup-java v3
    maven
    e2e/pom.xml
    • org.openjdk.jmh:jmh-core 1.36
    • org.openjdk.jmh:jmh-generator-annprocess 1.36
    • com.monitorjbl:xlsx-streamer 2.2.0
    fastexcel-reader/pom.xml
    • com.fasterxml:aalto-xml 1.3.2
    • org.apache.commons:commons-compress 1.22
    fastexcel-writer/pom.xml
    • com.github.rzymek:opczip 1.2.0
    pom.xml
    • org.junit:junit-bom 5.9.1
    • org.assertj:assertj-core 3.23.1
    • org.apache.poi:poi-ooxml 5.2.3
    • commons-io:commons-io 2.11.0
    • org.eluder.coveralls:coveralls-maven-plugin 4.3.0
    • org.apache.maven.plugins:maven-javadoc-plugin 3.4.1
    • org.sonatype.plugins:nexus-staging-maven-plugin 1.6.13
    • org.apache.maven.plugins:maven-source-plugin 3.2.1
    • org.apache.maven.plugins:maven-gpg-plugin 3.0.1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
  • Using Flux<DataBuffer> to send created excel data

    Using Flux to send created excel data

    I am trying to create excel file using fastexcel. Also, my goal is to deliver the file that is being created to the browser at the same time. The function that creates excel should emit Flux concurrently.

    So, the code looks like this.

    ...
    
    val out = dataBuffer.asOutputStream()
    val workbook = Workbook(out, "excel-file", "1.0")
    
    // returns flux in this function
    return Flux.create({ sink: FluxSink<DataBuffer> ->
        val sheet = workbook.newWorkSheet("my sheet")
        for(i in 1..100000) {
            sheet.value(i, 0, "first")
            sheet.value(i, 1, "second")
           
             ....
           
            // writes filled databuffer to flux
             if(i % 100 == 0) {
                 sheet.flush()
                 sink.next(dataBuffer) // <A>
             }
        }
        
        // finish sheet
        sheet.finish()
        sink.next(dataBuffer)
        
        // finish file
        workbook.finish()
        sink.next(dataBuffer)
        sink.complete()
    }
    

    With this code, I am able to download excel from browser immediately after request. However, if I collect returned flux and look at downloaded excel file, it is corrupted and cannot be opened from spreadsheet programs.

    To fix this, I can delete A line from code. It will then return complete spreadsheet that can be opened. But with this fix, I cannot download excel immediately because the sink operation starts after the sheet is fully created. Regarding that this code creates single sheet excel file, the download will start almost at the same time the file creation is completed.

    So, I want to know whether it is possible to use OutputStream applied to the workbook concurrently, so I can download excel file when the sheet is being created. It should also be in reactive way. Or, is it inhibited to access OutputStream while creating a single sheet?

    opened by anymate98 0
  • java.lang.NoClassDefFoundError: Failed resolution of: [Ljava/nio/file/LinkOption

    java.lang.NoClassDefFoundError: Failed resolution of: [Ljava/nio/file/LinkOption

    I'm getting

    FATAL EXCEPTION: DefaultDispatcher-worker-2
    Process: media.uqab.cartera, PID: 13697
    java.lang.NoClassDefFoundError: Failed resolution of: [Ljava/nio/file/LinkOption;
    at org.apache.commons.compress.utils.IOUtils.<clinit>(IOUtils.java:47)
    at org.apache.commons.compress.utils.IOUtils.toByteArray(IOUtils.java:254)
    at org.dhatim.fastexcel.reader.OPCPackage.open(OPCPackage.java:149)
    at org.dhatim.fastexcel.reader.ReadableWorkbook.<init>(ReadableWorkbook.java:56)
    at org.dhatim.fastexcel.reader.ReadableWorkbook.<init>(ReadableWorkbook.java:48)
    at media.uqab.libCartera.data.source.LocalDatabase.readFromSdCard(LocalDatabase.kt:586)
    at media.uqab.libCartera.data.repository.WalletRepositoryImpl.readFromSdCard(WalletRepositoryImpl.kt:99)
    at media.uqab.libCartera.domain.useCase.ReadFromSdCard.invoke(ReadFromSdCard.kt:12)
    at media.uqab.libCartera.presentation.viewmodel.SettingsViewModel$readFromSdCard$1.invokeSuspend(SettingsViewModel.kt:135)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
    at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
    Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@897c64d, Dispatchers.IO]
    Caused by: java.lang.ClassNotFoundException: Didn't find class "java.nio.file.LinkOption" on path: DexPathList[[zip file "/data/app/media.uqab.cartera-1/base.apk"],nativeLibraryDirectories=[/data/app/media.uqab.cartera-1/lib/x86, /data/app/media.uqab.cartera-1/base.apk!/lib/x86, /system/lib, /vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 17 more
    

    I was trying to restore a backup that I made with org.dhatim:fastexcel:0.12.13. But got the above exception while trying to restore it with org.dhatim:fastexcel-reader:0.12.13.

    The problem is only with devices (emulator) running API version 25. It perfectly restored on both virtual emulator with API 33 & actual device running API 31. May be java/nio/file/LinkOption not present in lower API.

    opened by fcat97 0
  • Sheet id would be null

    Sheet id would be null

    Invoke sheet.openStream() would throw an error:

    org.dhatim.fastexcel.reader.ExcelReaderException: Sheet#0 'my_sheet_name' is missing an entry in workbook rels (for id: 'null')
    	at org.dhatim.fastexcel.reader.OPCPackage.getSheetContent(OPCPackage.java:193)
    	at org.dhatim.fastexcel.reader.ReadableWorkbook.openStream(ReadableWorkbook.java:147)
    	at org.dhatim.fastexcel.reader.Sheet.openStream(Sheet.java:56)
    	at org.dhatim.fastexcel.reader.Sheet.read(Sheet.java:60)
            .......
    

    Then I debug into the stack, find the sheet's id property is null.

    The dependency version is 0.12.14.

    opened by zhan-ge 0
  • Datatable Definition

    Datatable Definition

    It is often necessary for accessibility reasons to explicitly define an area as a data table along with setting the top row as a header. This enables screen readers to accurately read the header columns. Please consider adding this functionality in future updates.

    enhancement help wanted 
    opened by cgeo7 0
Releases(0.14.4)
Owner
Cegid Conciliator
Cegid Conciliator
Jornada Big Tech: I will have 3 months to study and prepare myself for the Big Tech interviews. Repository containing all my study material.

Jornada Big Tech (Big Tech Journey) Jornada Big Tech: I will have 3 months to study and prepare myself for the Big Tech interviews. Repository contain

Camila Maia 87 Dec 8, 2022
Fun little program to generate worlds in Excel

Basic world generation for Excel! How to use (For windows): Download the latest release from Releases run java -jar WorldGenExcelVersion.jar "path_to_

Steven Zhu 1 Feb 12, 2022
JAXB-based Java library for Word docx, Powerpoint pptx, and Excel xlsx files

README What is docx4j? docx4j is an open source (Apache v2) library for creating, editing, and saving OpenXML "packages", including docx, pptx, and xs

Jason Harrop 1.9k Jan 2, 2023
Library that makes it possible to read, edit and write CSV files

AdaptiveTableLayout Welcome the new CSV Library AdaptiveTableLayout for Android by Cleveroad Pay your attention to our new library that makes it possi

Cleveroad 1.9k Jan 6, 2023
A library to create, read and validate ZUGFeRD compliant invoices. Available for Java and .NET

Konik ZUGFeRD Library Is an easy to use open source implementation of the ZUGFeRD data model including various enhancements. Features Easy and underst

Konik 42 Dec 20, 2022
F5 BIG-IP iControl REST vulnerability RCE exploit with Java including a testing LAB

CVE-2022-1388 F5 BIG-IP iControl REST vulnerability RCE exploit with Java and ELF. Included Scan a single target Scan many targets Exploit with a shel

Zer0verflow 10 Sep 24, 2022
QuickPerf is a testing library for Java to quickly evaluate and improve some performance-related properties

QuickPerf is a testing library for Java to quickly evaluate and improve some performance-related properties quickperf.io ?? Documentation Annotations

null 365 Dec 15, 2022
Flutter plugin for notification read & reply

Reflex Flutter plugin for notification read & reply. Compatibility ✅ Android ❌ iOS (active issue: iOS support for reflex) Show some ❤️ and ⭐ the repo

Devs On Flutter 14 Dec 20, 2022
Deploy this 🔥🔥🔥 BLAZING FAST 🔥🔥🔥 API to get instant access to ✨✨✨ INNOVATIVE ✨✨✨ API to quickly define whether the numbers are odd or even.

Is Odd API This ?? is ?? ?? a ?? simple API that ?? returns ?? whether ?? ?? a ?? number ?? ?? is ?? ?? odd ?? or ?? not. ♂ With ?? ?? this ?? ?? API

rferee 5 Sep 23, 2022
Community extension to generate a Java client from the provided Camunda 7 OpenAPI descitpion and also warp it into Spring Boot

Camunda Engine OpenAPI REST Client Java and Spring Boot This community extension is a convenience wrapper around the generated Java client from the Ca

Camunda Community Hub 29 Dec 28, 2022
A web application to generate Java source code with spring-boot and mybatis-plus

A web application to generate Java source code with spring-boot and mybatis-plus. Also, The class of Domain,Mapper,XML of Mapper Interface,Service,Controller are included. You can change the data source what you want to generate for your project in app running without restart this code -generator application.

Weasley 3 Aug 29, 2022
Generate a dynamic PAC script that will route traffic to your Burp proxy only if it matches the scope defined in your Burp target.

Burp PAC Server This Burp Extension generates a dynamic Proxy Auto-Configuration (PAC) script that will route traffic to your Burp proxy only if it ma

null 30 Jun 13, 2022
SitemapGen4j is a library to generate XML sitemaps in Java.

sitemapgen4j SitemapGen4j is a library to generate XML sitemaps in Java. What's an XML sitemap? Quoting from sitemaps.org: Sitemaps are an easy way fo

Dan Fabulich 151 Dec 16, 2022
Magic Bean: A very basic library which will generate POJOs.

Magic Bean: A very basic library which will generate POJOs.

Ethan McCue 48 Dec 27, 2022
Library to generate images from layers

react-native-image-generator Library for generate images from other images Installation yarn add react-native-image-generator Usage import { generate

Evgeny Usov 13 Nov 16, 2022
Generate facts from bytecode

soot-fact-generator generate facts from bytecode (source is https://github.com/plast-lab/doop-mirror/tree/master/generators) 通过soot解析bytecode生成fact,类似

null 14 Dec 28, 2022
This application will help you to generate Elasticsearch template based on your data

Welcome to templates generator application for Elasticsearch This application will help you to generate the template and/or test index, based on your

DBeast 2 Jan 2, 2023
A desktop app to generate QR codes.

qrcode-generator A desktop GUI app to generate QR codes. Currently a fun project and a work-in-progress. GitHub URL: https://github.com/abhinavgunwant

Abhinav Gunwant 2 Aug 2, 2022
JHipster Lite ⚡ is a development platform to generate, develop & deploy modern web applications & microservice architectures, step by step.

JHipster Lite ⚡ Description JHipster is a development platform to quickly generate, develop & deploy modern web applications & microservice architectu

JHipster 255 Jan 3, 2023