====== How to read and write an Excel file? ====== ===== About ===== This [[..:howto|howto]] will demonstrate you how to read and write to an [[:docs:resource:excel|Excel resource]]. ===== Steps ===== ==== Prerequisites ==== To following this ''howto'', you should have followed the [[howto:getting_started:getting_started|getting started guide]] to have knowledge of: * [[:howto:getting_started:4_select_data_resources|Resource creation and selection]] * [[:howto:getting_started:9_data_generation|Data Generation]] ==== Create an Excel file with Random Data ==== The below [[docs:tabli:data:fill|data fill]] command will create a excel resource named ''d_date.xlsx'' in the [[docs:connection:temp|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.(POIXMLDocumentPart.java:56) at com.tabulify.excel.ExcelSheet.(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 [[:docs:resource:attribute|attributes]] with the [[:docs:tabli:data:info|data info]] command. tabli data info date_dim.xlsx@temp ==== Read the data ==== What is the data of the file with the [[docs:tabli:data:head|data head command]]? tabli data head --limit 30 d_date.xlsx@temp