{-# LANGUAGE TypeApplications #-} module Main where import Control.Monad.Trans.State (execStateT) import Control.Monad (forM_) import Control.Monad.IO.Class import Data.Time (getZonedTime) import HExcel -- #!/usr/bin/env stack -- stack script --resolver lts-14.9 --package=HExcel -- import HExcel main = do wb <- workbookNew "buggy-dates.xls" let props = mkDocProperties { docPropertiesTitle = "Buggy Dates" , docPropertiesCompany = "" } workbookSetProperties wb props ws <- workbookAddWorksheet wb "Buggy Dates" df <- workbookAddFormat wb formatSetNumFormat df "mm/dd/yy hh:mm AM/PM" sequence_ [ writeDateTime ws (Just df) (fromIntegral (day - 1) * 24 + fromIntegral hour) 0 (DateTime 2019 11 day hour 0 0) | day <- [1..30], hour <- [0..23] ] workbookClose wb -- main :: IO () -- main = do -- wb <- workbookNew "test.xlsx" -- let props = mkDocProperties -- { docPropertiesTitle = "Test Workbook" -- , docPropertiesCompany = "HExcel" -- } -- workbookSetProperties wb props -- ws <- workbookAddWorksheet wb "First Sheet" -- df <- workbookAddFormat wb -- formatSetNumFormat df "mmm d yyyy hh:mm AM/PM" -- now <- getZonedTime -- writeDateTime ws (Just df) n 5 (zonedTimeToDateTime now) -- -- You can create HExcelState which is convenient api for writing to cells -- let initState = HExcelState Nothing ws 4 1 0 1 0 -- _ <- flip execStateT initState $ do -- writeCell "David" -- writeCell "Dimitrije" -- liftIO $ writeDateTime ws (Just df) 1 5 (zonedTimeToDateTime now) -- liftIO $ writeDateTime ws (Just df) 2 6 (zonedTimeToDateTime now) -- liftIO $ writeDateTime ws (Just df) 3 7 (zonedTimeToDateTime now) -- liftIO $ writeDateTime ws (Just df) 4 8 (zonedTimeToDateTime now) -- liftIO $ writeDateTime ws (Just df) 5 9 (zonedTimeToDateTime now) -- liftIO $ writeDateTime ws (Just df) 6 10 (zonedTimeToDateTime now) -- -- we can skip some rows -- skipRows 1 -- writeCell "Jovana" -- -- skip some columns -- skipCols 1 -- writeCell (zonedTimeToDateTime now) -- writeCell @Double 42.5 -- -- or use functions that run in plain IO -- -- forM_ [5 .. 8] $ \n -> do -- -- writeString ws Nothing n 3 "xxx" -- -- writeNumber ws Nothing n 4 1234.56 -- -- writeDateTime ws (Just df) n 5 (zonedTimeToDateTime now) -- workbookClose wb