Skip to content

Instantly share code, notes, and snippets.

@qrilka
Forked from deemp/example-xlsx.hs
Created December 12, 2022 17:45
Show Gist options
  • Save qrilka/ffd9fe984e3a50fa1b0bb6c5bcd7859c to your computer and use it in GitHub Desktop.
Save qrilka/ffd9fe984e3a50fa1b0bb6c5bcd7859c to your computer and use it in GitHub Desktop.
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
import Codec.Xlsx as X
import qualified Data.ByteString.Lazy as L
import Control.Lens
import Data.Time.Clock.POSIX
main :: IO ()
main = do
ct <- getPOSIXTime
let
name = "3"
ws =
X.def
& X.atCell (3, 2) ?~ X.Cell (Just 1) (Just $ X.CellDouble 142.4) Nothing Nothing
& X.atCell (3, 3) ?~ X.Cell (Just 2) (Just $ X.CellDouble 242.5) Nothing Nothing
& X.atCell (3, 4) ?~ X.Cell (Just 3) (Just $ X.CellDouble 342.6) Nothing Nothing
styleSheet = sheet
where
-- fill
red_ = X.def & X.colorARGB ?~ "FFFF0000"
fill_ =
X.def
& X.fillPattern
?~ ( X.def
& X.fillPatternFgColor ?~ red_
& X.fillPatternType ?~ X.PatternTypeSolid
)
(cellXF1 :: X.CellXf) =
X.def
& X.cellXfFillId ?~ 1
& X.cellXfApplyFill ?~ True
(cellXF2 :: X.CellXf) =
X.def
& X.cellXfFillId ?~ 2
& X.cellXfApplyFill ?~ True
(cellXF3 :: X.CellXf) =
X.def
& X.cellXfFillId ?~ 3
& X.cellXfApplyFill ?~ True
sheet =
X.minimalStyleSheet
& styleSheetCellXfs %~ (++ [cellXF1, cellXF2,cellXF3])
& X.styleSheetFills %~ (++ [fill_, fill_])
xlsx =
X.def
& X.atSheet "List1" ?~ ws
& X.xlStyles .~ X.renderStyleSheet styleSheet
L.writeFile ("example-" <> name <> ".xlsx") $ X.fromXlsx ct xlsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment