Skip to content
This repository has been archived by the owner on Jun 27, 2022. It is now read-only.

Commit

Permalink
Merge c1336cf into 18db560
Browse files Browse the repository at this point in the history
  • Loading branch information
fterrag committed Jul 31, 2018
2 parents 18db560 + c1336cf commit 1e87b90
Show file tree
Hide file tree
Showing 7 changed files with 236 additions and 53 deletions.
12 changes: 6 additions & 6 deletions README.md
Expand Up @@ -18,6 +18,12 @@ $ make
$ make install
```

## macOS via Homebrew

```
$ brew install libxlsxwriter
```

Visit [http://libxlsxwriter.github.io/getting_started.html](http://libxlsxwriter.github.io/getting_started.html) for more information on installing libxlsxwriter.

## Sample Use
Expand Down Expand Up @@ -52,12 +58,6 @@ func main() {
}
```

## Todo

- [ ] Increase test coverage
- [ ] Documentation
- [ ] Expand libxlsxwriter API coverage

## Contributing

* Submit a PR (tests and documentation included)
Expand Down
122 changes: 122 additions & 0 deletions chart.go
@@ -0,0 +1,122 @@
package goxlsxwriter

/*
#cgo LDFLAGS: -L. -lxlsxwriter
#include <xlsxwriter.h>
*/
import "C"
import (
"unsafe"
)

type ChartType int

const (
// Area chart.
chartTypeArea ChartType = C.LXW_CHART_AREA

// Area chart - stacked.
chartTypeAreaStacked ChartType = C.LXW_CHART_AREA_STACKED

// Area chart - percentage stacked.
chartTypeAreaStackedPercent ChartType = C.LXW_CHART_AREA_STACKED_PERCENT

// Bar chart.
chartTypeBar ChartType = C.LXW_CHART_BAR

// Bar chart - stacked.
chartTypeBarStacked ChartType = C.LXW_CHART_BAR_STACKED

// Bar chart - percentage stacked.
chartTypeBarStackedPercent ChartType = C.LXW_CHART_BAR_STACKED_PERCENT

// Column chart.
chartTypeColumn ChartType = C.LXW_CHART_COLUMN

// Column chart - stacked.
chartTypeColumnStacked ChartType = C.LXW_CHART_COLUMN_STACKED

// Column chart - percentage stacked.
chartTypeColumnStackedPercent ChartType = C.LXW_CHART_COLUMN_STACKED_PERCENT

// Doughnut chart.
chartTypeDoughnut ChartType = C.LXW_CHART_DOUGHNUT

// Line chart.
chartTypeLine ChartType = C.LXW_CHART_LINE

// Pie chart.
chartTypePie ChartType = C.LXW_CHART_PIE

// Scatter chart.
chartTypeScatter ChartType = C.LXW_CHART_SCATTER

// Scatter chart - straight.
chartTypeScatterStraight ChartType = C.LXW_CHART_SCATTER_STRAIGHT

// Scatter chart - straight with markers.
chartTypeScatterStraightWithMarkers ChartType = C.LXW_CHART_SCATTER_STRAIGHT_WITH_MARKERS

// Scatter chart - smooth.
chartTypeScatterSmooth ChartType = C.LXW_CHART_SCATTER_SMOOTH

// Scatter chart - smooth with markers.
chartTypeScatterSmoothWithMarkers ChartType = C.LXW_CHART_SCATTER_SMOOTH_WITH_MARKERS

// Radar chart.
chartTypeRadar ChartType = C.LXW_CHART_RADAR

// Radar chart - with markers.
chartTypeRadarWithMarkers ChartType = C.LXW_CHART_RADAR_WITH_MARKERS

// Radar chart - filled.
chartTypeRadarFilled ChartType = C.LXW_CHART_RADAR_FILLED
)

// Chart represents an Excel chart.
type Chart struct {
CChart *C.lxw_chart
}

// ChartSeries represents an Excel chart series.
type ChartSeries struct {
Chart *Chart
CChartSeries *C.lxw_chart_series
}

// ChartOptions contains options to be set when inserting a chart into a
// worksheet.
type ChartOptions struct {
ImageOptions
}

// NewChart creates and returns a new Chart.
func NewChart(workbook *Workbook, chartType ChartType) *Chart {
cChartType := C.uchar(chartType)

cChart := C.workbook_add_chart(workbook.CWorkbook, cChartType)

chart := &Chart{
CChart: cChart,
}

return chart
}

// NewChartSeries creates and returns a new ChartSeries.
func NewChartSeries(chart *Chart, categories string, values string) *ChartSeries {
cCategories := C.CString(categories)
defer C.free(unsafe.Pointer(cCategories))

cValues := C.CString(values)
defer C.free(unsafe.Pointer(cValues))

cChartSeries := C.chart_add_series(chart.CChart, cCategories, cValues)

chartSeries := &ChartSeries{
Chart: chart,
CChartSeries: cChartSeries,
}

return chartSeries
}
56 changes: 30 additions & 26 deletions format.go
Expand Up @@ -7,76 +7,80 @@ package goxlsxwriter
import "C"
import "unsafe"

// UNDERLINE_* constants are to be used with SetUnderline().
type FormatUnderline int

// Underline* constants are to be used with SetUnderline().
const (
// Single underline.
UNDERLINE_SINGLE int = C.LXW_UNDERLINE_SINGLE
UnderlineSingle FormatUnderline = C.LXW_UNDERLINE_SINGLE

// Double underline.
UNDERLINE_DOUBLE int = C.LXW_UNDERLINE_DOUBLE
UnderlineDouble FormatUnderline = C.LXW_UNDERLINE_DOUBLE

// Single accounting underline.
UNDERLINE_SINGLE_ACCOUNTING int = C.LXW_UNDERLINE_SINGLE_ACCOUNTING
UnderlineSingleAccounting FormatUnderline = C.LXW_UNDERLINE_SINGLE_ACCOUNTING

// Double accounting line.
UNDERLINE_DOUBLE_ACCOUNTING int = C.LXW_UNDERLINE_DOUBLE_ACCOUNTING
UndelineDoubleAccounting FormatUnderline = C.LXW_UNDERLINE_DOUBLE_ACCOUNTING
)

// PATTERN_* constants are to be used with SetPattern().
type FormatPattern int

// Pattern* constants are to be used with SetPattern().
const (
// Solid.
PATTERN_SOLID int = C.LXW_PATTERN_SOLID
PatternSolid FormatPattern = C.LXW_PATTERN_SOLID

// Medium gray.
PATTERN_MEDIUM_GRAY int = C.LXW_PATTERN_MEDIUM_GRAY
PatternMediumGray FormatPattern = C.LXW_PATTERN_MEDIUM_GRAY

// Dark gray.
PATTERN_DARK_GRAY int = C.LXW_PATTERN_DARK_GRAY
PatternDarkGray FormatPattern = C.LXW_PATTERN_DARK_GRAY

// Light gray.
PATTERN_LIGHT_GRAY int = C.LXW_PATTERN_LIGHT_GRAY
PatternLightGray FormatPattern = C.LXW_PATTERN_LIGHT_GRAY

// Dark horizontal line.
PATTERN_DARK_HORIZONTAL int = C.LXW_PATTERN_DARK_HORIZONTAL
PatternDarkHorizontal FormatPattern = C.LXW_PATTERN_DARK_HORIZONTAL

// Dark vertical line.
PATTERN_DARK_VERTICAL int = C.LXW_PATTERN_DARK_VERTICAL
PatternDarkVertical FormatPattern = C.LXW_PATTERN_DARK_VERTICAL

// Dark diagonal stripe.
PATTERN_DARK_DOWN int = C.LXW_PATTERN_DARK_DOWN
PatternDarkDown FormatPattern = C.LXW_PATTERN_DARK_DOWN

// Reverse dark diagonal stripe.
PATTERN_DARK_UP int = C.LXW_PATTERN_DARK_UP
PatternDarkUp FormatPattern = C.LXW_PATTERN_DARK_UP

// Dark grid.
PATTERN_DARK_GRID int = C.LXW_PATTERN_DARK_GRID
PatternDarkGrid FormatPattern = C.LXW_PATTERN_DARK_GRID

// Dark trellis.
PATTERN_DARK_TRELLIS int = C.LXW_PATTERN_DARK_TRELLIS
PatternDarkTrellis FormatPattern = C.LXW_PATTERN_DARK_TRELLIS

// Light horizontal line.
PATTERN_LIGHT_HORIZONTAL int = C.LXW_PATTERN_LIGHT_HORIZONTAL
PatternLightHorizontal FormatPattern = C.LXW_PATTERN_LIGHT_HORIZONTAL

// Light vertical line.
PATTERN_LIGHT_VERTICAL int = C.LXW_PATTERN_LIGHT_VERTICAL
PatternLightVertical FormatPattern = C.LXW_PATTERN_LIGHT_VERTICAL

// Light diagonal stripe.
PATTERN_LIGHT_DOWN int = C.LXW_PATTERN_LIGHT_DOWN
PatternLightDown FormatPattern = C.LXW_PATTERN_LIGHT_DOWN

// Reverse light diagonal stripe.
PATTERN_LIGHT_UP int = C.LXW_PATTERN_LIGHT_UP
PatternLightUp FormatPattern = C.LXW_PATTERN_LIGHT_UP

// Light grid.
PATTERN_LIGHT_GRID int = C.LXW_PATTERN_LIGHT_GRID
PatternLightGrid FormatPattern = C.LXW_PATTERN_LIGHT_GRID

// Light trellis.
PATTERN_LIGHT_TRELLIS int = C.LXW_PATTERN_LIGHT_TRELLIS
PatternLightTrellis FormatPattern = C.LXW_PATTERN_LIGHT_TRELLIS

// 12.5% gray.
PATTERN_GRAY_125 int = C.LXW_PATTERN_GRAY_125
PatternGray125 FormatPattern = C.LXW_PATTERN_GRAY_125

// 6.25% gray.
PATTERN_GRAY_0625 int = C.LXW_PATTERN_GRAY_0625
PatternGray625 FormatPattern = C.LXW_PATTERN_GRAY_0625
)

// Format represents an Excel style used to apply formatting to cells.
Expand Down Expand Up @@ -129,14 +133,14 @@ func (f *Format) SetItalic() {

// SetUnderline sets the font to be underline using the
// specified UNDERLINE_* style.
func (f *Format) SetUnderline(style int) {
func (f *Format) SetUnderline(style FormatUnderline) {
cStyle := (C.uint8_t)(style)

C.format_set_underline(f.CFormat, cStyle)
}

// SetPattern sets the pattern to the specific PATTERN_* pattern.
func (f *Format) SetPattern(pattern int) {
func (f *Format) SetPattern(pattern FormatPattern) {
cPattern := (C.uint8_t)(pattern)

C.format_set_pattern(f.CFormat, cPattern)
Expand Down
8 changes: 4 additions & 4 deletions format_test.go
Expand Up @@ -77,7 +77,7 @@ func TestSetBoldItalicUnderline(t *testing.T) {
formatItalic.SetItalic()

formatUnderline := NewFormat(workbook)
formatUnderline.SetUnderline(UNDERLINE_SINGLE)
formatUnderline.SetUnderline(UnderlineSingle)

worksheet.WriteString(0, 0, "Bold", formatBold)
worksheet.WriteString(1, 1, "Italic", formatItalic)
Expand All @@ -97,10 +97,10 @@ func TestSetPattern(t *testing.T) {
worksheet := NewWorksheet(workbook, "Sheet 1")

format := NewFormat(workbook)
format.SetPattern(PATTERN_SOLID)
format.SetPattern(PatternSolid)

format2 := NewFormat(workbook)
format2.SetPattern(PATTERN_GRAY_125)
format2.SetPattern(PatternGray125)

worksheet.WriteString(0, 0, "PATTERN_SOLID", format)
worksheet.WriteString(1, 0, "PATTERN_GRAY_125", format2)
Expand Down Expand Up @@ -140,7 +140,7 @@ func TestSetNumericalFormat(t *testing.T) {
format := NewFormat(workbook)
format.SetNumericalFormat("0 \"dollars and\" .00 \"cents\"")

worksheet.WriteFloat(0, 0, 5.50, format)
worksheet.WriteFloat64(0, 0, 5.50, format)

workbook.Close()

Expand Down
2 changes: 1 addition & 1 deletion workbook.go
Expand Up @@ -22,7 +22,7 @@ type WorkbookOptions struct {
TmpDir string
}

// NewWorkbook create and returns a new instance of Workbook.
// NewWorkbook create and returns a new Workbook.
func NewWorkbook(filename string, options *WorkbookOptions) *Workbook {
cFilename := C.CString(filename)
defer C.free(unsafe.Pointer(cFilename))
Expand Down

0 comments on commit 1e87b90

Please sign in to comment.