[BUG]: Import/export feature is not working #1275

Open
opened 2025-12-16 08:59:55 +00:00 by JLTRY · 6 comments

What Happened?

I tried to use Export/import feature with my component on a view

Steps to reproduce the Bug

When clicking on import I have this error

An error has occurred.
    0 Class "JCB\Component\Jtax\Administrator\Helper\PhpOffice\PhpSpreadsheet\Reader\chunkReadFilter" not found 

after solving it I have an issue
Class "JCB\Component\Jtax\Administrator\Helper\IOFactory" not found

When clicking on export I have this error
PhpOffice\PhpSpreadsheet\Document\Properties::setLastModifiedBy(): Argument #1 ($modifiedBy) must be of type string, null given, called in F:\Sites\repos\com_jtax\admin\src\Helper\JtaxHelper.php on line 226

Which Joomla version are you compiling in?

6.0.1

Which PHP version are you compiling in?

v8.3

Which Joomla versions are you targeting?

v5

Which PHP version are you targeting?

8.3

Which Web server is JCB running on?

Apache 2.4

Which Relational Database is JCB running on?

MySql 8.9

Which OS is JCB running on?

Linux

Which JCB version are you using?

6.1.4-beta2

Where in JCB did this issue occur?

Dashboard(admin_view)

On which browsers did you encounter the issue?

Firefox

Additional Comments

For chunkReadFilter" not found the issue can be solved by commenting the lines with chunkReadFile
//$chunkFilter = new PhpOffice\PhpSpreadsheet\Reader\chunkReadFilter(2,1);
and
//$excelReader->setReadFilter($chunkFilter);
Fir IoFactory not found I solved it by adding use lines at the head of my file
use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Style\Alignment;

export issue can be solved by changing line
if (!$modified) { //JLT $modified = Factory::getDate()->format('jS_F_Y');//$user->name; }

### What Happened? I tried to use Export/import feature with my component on a view ### Steps to reproduce the Bug When clicking on import I have this error ``` An error has occurred. 0 Class "JCB\Component\Jtax\Administrator\Helper\PhpOffice\PhpSpreadsheet\Reader\chunkReadFilter" not found ``` after solving it I have an issue `Class "JCB\Component\Jtax\Administrator\Helper\IOFactory" not found ` When clicking on export I have this error `PhpOffice\PhpSpreadsheet\Document\Properties::setLastModifiedBy(): Argument #1 ($modifiedBy) must be of type string, null given, called in F:\Sites\repos\com_jtax\admin\src\Helper\JtaxHelper.php on line 226` ### Which Joomla version are you compiling in? 6.0.1 ### Which PHP version are you compiling in? v8.3 ### Which Joomla versions are you targeting? v5 ### Which PHP version are you targeting? 8.3 ### Which Web server is JCB running on? Apache 2.4 ### Which Relational Database is JCB running on? MySql 8.9 ### Which OS is JCB running on? Linux ### Which JCB version are you using? 6.1.4-beta2 ### Where in JCB did this issue occur? Dashboard(admin_view) ### On which browsers did you encounter the issue? Firefox ### Additional Comments For chunkReadFilter" not found the issue can be solved by commenting the lines with chunkReadFile ` //$chunkFilter = new PhpOffice\PhpSpreadsheet\Reader\chunkReadFilter(2,1);` and ` //$excelReader->setReadFilter($chunkFilter);` Fir IoFactory not found I solved it by adding use lines at the head of my file `use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Style\Alignment; ` export issue can be solved by changing line ` if (!$modified) { //JLT $modified = Factory::getDate()->format('jS_F_Y');//$user->name; } `
JLTRY added the Bug label 2025-12-16 08:59:55 +00:00
Owner

Hi @JLTRY
The Import feature was removed when we moved to Joomla 4.
There should be no Import/Export functionality in JCB v6.
Is this project perhaps an older Joomla 3 system that was migrated forward?
Could you please share a bit more detail - ideally with screenshots - showing where you are encountering this?
Also, to clarify: are you referring to the Import feature in the Demo Component or the Packaging engine of JCB?
Thanks for helping us narrow this down.

Hi @JLTRY The **Import** feature was removed when we moved to **Joomla 4**. There should be **no Import/Export functionality in JCB v6**. Is this project perhaps an **older Joomla 3 system that was migrated forward**? Could you please share a bit more detail - ideally with **screenshots** - showing where you are encountering this? Also, to clarify: are you referring to the **Import feature in the Demo Component** or the [Packaging engine](https://github.com/orgs/joomengine/discussions/995) of JCB? Thanks for helping us narrow this down.
Author

I started with JBC with Joomla 5.0
It is just the feature of importing/exporting data from my admin view
Configuration
image.png
Buttons in backend
image.png
image.png

image.png

I started with JBC with Joomla 5.0 It is just the feature of importing/exporting data from my admin view Configuration ![image.png](/attachments/fba18984-dd91-4df5-8ba1-3aadbf540cf4) Buttons in backend ![image.png](/attachments/4d567f39-ca4a-4bcf-81cb-606d59533d3f) ![image.png](/attachments/d5414a8b-fef8-4f1f-b375-73ee1e4126b3) ![image.png](/attachments/4a6f8127-9fab-4ee9-a844-7685677ae057)
Owner

@JLTRY This issue appears to be related to the custom buttons added to your administrator view and is not caused by Joomla Component Builder itself.

Unfortunately, problems arising from custom user-written code are very difficult for us to debug or reproduce. I'd be happy to assist if this were a JCB-related bug, but we're unable to provide support for issues originating from custom code outside of JCB's scope.

@JLTRY This issue appears to be related to the custom buttons added to your administrator view and is not caused by Joomla Component Builder itself. Unfortunately, problems arising from custom user-written code are very difficult for us to debug or reproduce. I'd be happy to assist if this were a JCB-related bug, but we're unable to provide support for issues originating from custom code outside of JCB's scope.
Author

Hi @Lemuel
The issue can be reproduced with Demo component
For import part :
add custom button image.png
do not add any additional code
compile the Demo component and install it
Go to looks admin view of the Demo component
image.png
click on import and select an xls file
You have then an error message
image.png

Hi @Lemuel The issue can be reproduced with Demo component For import part : add custom button ![image.png](/attachments/87cfe9be-12d5-4867-8862-737217d6efd2) do not add any additional code compile the Demo component and install it Go to looks admin view of the Demo component ![image.png](/attachments/960dbb34-674c-43e0-9bdb-599d1592c8b6) click on import and select an xls file You have then an error message ![image.png](/attachments/3fa017d6-720a-4007-9c87-dfccaa84658a)
Owner

Thank you for the detailed report and for taking the time to investigate and document the issues you encountered.

Before addressing the specific errors, it's important to clarify a fundamental point about the current import/export architecture in JCB, because this directly explains why what you are attempting does not work as expected.


About the Current Import Engine

The current import system is not a simple "button-based upload -> immediate database insert" workflow like older JCB versions or many traditional Joomla components.

Instead, the implementation you are trying to use is the persistent import engine, which is:

  • Queue-based
  • State-aware
  • File-tracked
  • CLI-driven
  • Designed for long-running and resumable imports

This approach is intentionally more advanced and enterprise-grade.

What this means in practice

The import process does not execute immediately when a file is uploaded. Instead:

  1. Files are uploaded and stored
  2. Metadata is persisted
  3. Import jobs are queued
  4. Processing happens later via CLI commands
  5. Progress, failures, and state are tracked persistently

This design allows:

  • Safe handling of large datasets
  • Resume/retry support
  • Auditability
  • Background processing (cron / scheduler)
  • Decoupling UI from heavy processing

This is exactly how the demo component works, and it is tested continuously through our automated test suite. From our side, the demo component imports and exports correctly every day.


Why Adding Toolbar Buttons Is Not Sufficient

Simply adding toolbar buttons and calling import/export logic will not work with the current system.

A working setup requires multiple coordinated parts, including:

  • Additional database tables
  • Supporting views
  • Controller adaptations
  • Queue logic
  • CLI processing
  • File and file-type integration
  • Proper class extension in the correct locations

Without these pieces, the workflow breaks - which is exactly what you are seeing.


About the "Missing Class" Errors

chunkReadFilter not found

IOFactory not found

These errors are not bugs in JCB.

They occur because the PhpSpreadsheet library is not linked into your component.

In the demo component, this is handled explicitly via Component Files & Folders:

  • Go to Components -> Your Component

  • Click the "Files & Folders" icon (the suitcase icon)

  • In the Advanced tab, you'll see a linked path similar to:

    JPATH_LIBRARIES/phpspreadsheet/vendor
    

This ensures that:

  • PhpSpreadsheet is shipped with the component
  • Namespaces resolve correctly
  • Classes like IOFactory and chunkReadFilter are available

Unless you add this linkage, those classes will not be available, and PHP will correctly throw a "class not found" error.

Manually commenting out code or adding use statements only masks the real issue - the library itself is missing.


About the Export Error (setLastModifiedBy)

You correctly identified that this error occurs because a null value is being passed where a string is required.

Your workaround is valid and will prevent the fatal error.
This part of the export flow is currently being refined as part of ongoing refactoring.


Documentation & Expectations

You are correct that documentation for this system is still limited.

This import engine is:

  • New
  • Actively being refactored
  • Intentionally complex (by design)

For now, the demo component is the canonical reference.
Anyone attempting to use this system needs to:

  • Read the demo code
  • Follow the namespaces
  • Trace the class flow
  • Understand how the queue, files, and CLI pieces fit together

What We Are Working On Next

We fully recognize that this solution is overkill for many use cases.

That is why we are currently working on:

  • A simpler import path
  • Immediate, direct table imports
  • No queue
  • No persistent state
  • Minimal setup

This will better serve users who just want:

"Upload a spreadsheet -> insert rows -> done"

Once that simplified approach is ready, it will be released with proper documentation and examples.


Summary

  • The demo component works as intended
  • The current import engine is advanced by design
  • Missing classes are due to missing file/library linkage
  • Toolbar-only implementations will not work
  • A simpler import/export system is actively being developed

We appreciate your patience while this refactoring is underway, and we strongly encourage you to either:

  • Fully replicate the demo component's structure, or
  • Wait for the upcoming simplified import solution

Thank you for your understanding and for taking the time to report your findings - they are valuable and appreciated.

Thank you for the detailed report and for taking the time to investigate and document the issues you encountered. Before addressing the specific errors, it's important to clarify a fundamental point about the **current import/export architecture in JCB**, because this directly explains why what you are attempting does not work as expected. --- ## About the Current Import Engine The **current import system is not a simple "button-based upload -> immediate database insert" workflow** like older JCB versions or many traditional Joomla components. Instead, the implementation you are trying to use is the **persistent import engine**, which is: * **Queue-based** * **State-aware** * **File-tracked** * **CLI-driven** * **Designed for long-running and resumable imports** This approach is intentionally more advanced and enterprise-grade. ### What this means in practice The import process **does not execute immediately** when a file is uploaded. Instead: 1. Files are uploaded and stored 2. Metadata is persisted 3. Import jobs are queued 4. Processing happens later via **CLI commands** 5. Progress, failures, and state are tracked persistently This design allows: * Safe handling of large datasets * Resume/retry support * Auditability * Background processing (cron / scheduler) * Decoupling UI from heavy processing This is **exactly how the demo component works**, and it is tested continuously through our automated test suite. From our side, the demo component imports and exports correctly every day. --- ## Why Adding Toolbar Buttons Is Not Sufficient Simply adding toolbar buttons and calling import/export logic **will not work** with the current system. A working setup requires **multiple coordinated parts**, including: * Additional database tables * Supporting views * Controller adaptations * Queue logic * CLI processing * File and file-type integration * Proper class extension in the correct locations Without these pieces, the workflow breaks - which is exactly what you are seeing. --- ## About the "Missing Class" Errors ### `chunkReadFilter` not found ### `IOFactory` not found These errors are **not bugs** in JCB. They occur because the **PhpSpreadsheet library is not linked into your component**. In the demo component, this is handled explicitly via **Component Files & Folders**: * Go to *Components -> Your Component* * Click the **"Files & Folders"** icon (the suitcase icon) * In the **Advanced** tab, you'll see a linked path similar to: ``` JPATH_LIBRARIES/phpspreadsheet/vendor ``` This ensures that: * PhpSpreadsheet is shipped with the component * Namespaces resolve correctly * Classes like `IOFactory` and `chunkReadFilter` are available Unless you add this linkage, those classes **will not be available**, and PHP will correctly throw a "class not found" error. Manually commenting out code or adding `use` statements only masks the real issue - the library itself is missing. --- ## About the Export Error (`setLastModifiedBy`) You correctly identified that this error occurs because a `null` value is being passed where a string is required. Your workaround is valid and will prevent the fatal error. This part of the export flow is currently being refined as part of ongoing refactoring. --- ## Documentation & Expectations You are correct that **documentation for this system is still limited**. This import engine is: * New * Actively being refactored * Intentionally complex (by design) For now, the **demo component is the canonical reference**. Anyone attempting to use this system needs to: * Read the demo code * Follow the namespaces * Trace the class flow * Understand how the queue, files, and CLI pieces fit together --- ## What We Are Working On Next We fully recognize that this solution is **overkill for many use cases**. That is why we are currently working on: * A **simpler import path** * Immediate, direct table imports * No queue * No persistent state * Minimal setup This will better serve users who just want: > "Upload a spreadsheet -> insert rows -> done" Once that simplified approach is ready, it will be released with proper documentation and examples. --- ## Summary * The demo component **works as intended** * The current import engine is **advanced by design** * Missing classes are due to **missing file/library linkage** * Toolbar-only implementations will not work * A simpler import/export system is actively being developed We appreciate your patience while this refactoring is underway, and we strongly encourage you to either: * Fully replicate the demo component's structure, **or** * Wait for the upcoming simplified import solution Thank you for your understanding and for taking the time to report your findings - they are valuable and appreciated.
Author

@Llewellyn Thank you for your answer.
With my workaround I am able to import/Export for my component
I will wait for future simpler methods

@Llewellyn Thank you for your answer. With my workaround I am able to import/Export for my component I will wait for future simpler methods
Lemuel added help wanted and removed Bug labels 2026-02-11 08:24:42 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: joomla/Component-Builder#1275