How to read and write an Excel file?
About
This howto will demonstrate you how to read and write to an Excel resource.
Steps
Prerequisites
To following this howto, you should have followed the getting started guide to have knowledge of:
Create an Excel file with Random Data
The below data fill command will create a excel resource named d_date.xlsx in the temporary directory.
tabli data fill --generator-selector date_dim--datagen.yml@howto date_dim.xlsx@temp
11:54:15 - INFO - The log level was set to INFO
11:54:15 - INFO - The following arguments were received (data,fill,--generator-selector,date_dim--datagen.yml@howto,date_dim.xlsx@temp)
11:54:15 - INFO - The current file system path is /home/admin/code/java-mono/tabulify-cli/.
11:54:15 - INFO - The default connection was set to: `cd`
11:54:15 - INFO - No project was found.
11:54:15 - INFO - The command (data) was found
11:54:15 - INFO - The command (data.fill) was found
11:54:16 - INFO - Starting filling the tables for the data store without the dependencies (the parent/foreign table)
11:54:16 - INFO - --buffer-size parameter NOT found. Using default : 20000
ERROR StatusLogger Could not register mbeans
java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:358)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.checkMBeanTrustPermission(DefaultMBeanServerInterceptor.java:1805)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:318)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
at org.apache.logging.log4j.core.jmx.Server.register(Server.java:400)
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:168)
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:141)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:632)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:694)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:711)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
at org.apache.poi.logging.PoiLogManager.getLogger(PoiLogManager.java:42)
at org.apache.poi.ooxml.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
at com.tabulify.excel.ExcelSheet.<init>(ExcelSheet.java:66)
at com.tabulify.excel.ExcelSheet$ExcelSheetConfig.build(ExcelSheet.java:259)
at com.tabulify.excel.ExcelDataPath.getExcelSheet(ExcelDataPath.java:82)
at com.tabulify.excel.ExcelDataPath.createFile(ExcelDataPath.java:140)
at com.tabulify.excel.ExcelManager.create(ExcelManager.java:30)
at com.tabulify.fs.FsDataSystem.create(FsDataSystem.java:212)
at com.tabulify.spi.Tabulars.create(Tabulars.java:33)
at com.tabulify.transfer.TransferSourceTarget.createTarget(TransferSourceTarget.java:475)
at com.tabulify.transfer.TransferSourceTarget.targetPreOperationsAndCheck(TransferSourceTarget.java:302)
at com.tabulify.transfer.TransferManager.runCrossTransfer(TransferManager.java:237)
at com.tabulify.transfer.TransferManager.run(TransferManager.java:600)
at com.tabulify.transfer.Transfers.transfers(Transfers.java:52)
at com.tabulify.tabli.TabliDataTransferManager.runAndGetFeedBacks(TabliDataTransferManager.java:384)
at com.tabulify.tabli.TabliDataFill.run(TabliDataFill.java:72)
at com.tabulify.tabli.TabliData.run(TabliData.java:105)
at com.tabulify.tabli.Tabli.main(Tabli.java:295)
at javademo.run(javademo.java:3)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at net.bytle.docExec.DocExecutorUnit.eval(DocExecutorUnit.java:203)
at net.bytle.docExec.DocExecutor.execute(DocExecutor.java:270)
at net.bytle.docExec.DocExecutor.run(DocExecutor.java:125)
at com.tabulify.doc.DocRun.main(DocRun.java:154)
at com.tabulify.doc.DocRunTest.docTest(DocRunTest.java:17)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
at org.junit.vintage.engine.execution.VintageExecutor.executeClassesAndMethodsSequentially(VintageExecutor.java:93)
at org.junit.vintage.engine.execution.VintageExecutor.executeAllChildren(VintageExecutor.java:73)
at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:70)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:201)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:170)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:94)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:59)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:142)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:58)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$1(InterceptingLauncher.java:39)
at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25)
at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:38)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:63)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
11:54:16 - INFO - The target data operation (CREATE) was executed against the target (date_dim.xlsx@temp)
Source Target Latency (ms) Row Count Error Message
--------------- ------------------ ------------ --------- ----- -------
date_dim@memgen date_dim.xlsx@temp 1126 1000
11:54:17 - INFO - Latency Time: 0:0:1.248 (hour:minutes:seconds:milli)
11:54:17 - INFO - Ie (1248) milliseconds
11:54:17 - INFO - Done. Bye !
11:54:17 - INFO - To not see the `info` log, you can set the log level to `tip` with `tabli conf set --log-level tip`
Check the attributes
Check the attributes with the data info command.
tabli data info date_dim.xlsx@temp
Read the data
What is the data of the file with the data head command?
tabli data head --limit 30 d_date.xlsx@temp