Add support for insert BMP format images
- Add support for workbook function groups - Update code and docs for the build-in currency number format - Update unit tests
This commit is contained in:
parent
12645e7116
commit
1f69f6b24a
|
@ -51,8 +51,8 @@ func parseGraphicOptions(opts *GraphicOptions) *GraphicOptions {
|
|||
|
||||
// AddPicture provides the method to add picture in a sheet by given picture
|
||||
// format set (such as offset, scale, aspect ratio setting and print settings)
|
||||
// and file path, supported image types: EMF, EMZ, GIF, JPEG, JPG, PNG, SVG,
|
||||
// TIF, TIFF, WMF, and WMZ. This function is concurrency safe. For example:
|
||||
// and file path, supported image types: BMP, EMF, EMZ, GIF, JPEG, JPG, PNG,
|
||||
// SVG, TIF, TIFF, WMF, and WMZ. This function is concurrency safe. For example:
|
||||
//
|
||||
// package main
|
||||
//
|
||||
|
@ -436,8 +436,9 @@ func (f *File) addMedia(file []byte, ext string) string {
|
|||
// type for relationship parts and the Main Document part.
|
||||
func (f *File) setContentTypePartImageExtensions() error {
|
||||
imageTypes := map[string]string{
|
||||
"jpeg": "image/", "png": "image/", "gif": "image/", "svg": "image/", "tiff": "image/",
|
||||
"emf": "image/x-", "wmf": "image/x-", "emz": "image/x-", "wmz": "image/x-",
|
||||
"bmp": "image/", "jpeg": "image/", "png": "image/", "gif": "image/",
|
||||
"svg": "image/", "tiff": "image/", "emf": "image/x-", "wmf": "image/x-",
|
||||
"emz": "image/x-", "wmz": "image/x-",
|
||||
}
|
||||
content, err := f.contentTypesReader()
|
||||
if err != nil {
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
_ "golang.org/x/image/bmp"
|
||||
_ "golang.org/x/image/tiff"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -64,6 +65,7 @@ func TestAddPicture(t *testing.T) {
|
|||
assert.NoError(t, f.AddPicture("Sheet1", "Q8", filepath.Join("test", "images", "excel.gif"), nil))
|
||||
assert.NoError(t, f.AddPicture("Sheet1", "Q15", filepath.Join("test", "images", "excel.jpg"), nil))
|
||||
assert.NoError(t, f.AddPicture("Sheet1", "Q22", filepath.Join("test", "images", "excel.tif"), nil))
|
||||
assert.NoError(t, f.AddPicture("Sheet1", "Q28", filepath.Join("test", "images", "excel.bmp"), nil))
|
||||
|
||||
// Test write file to given path
|
||||
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddPicture1.xlsx")))
|
||||
|
|
6
sheet.go
6
sheet.go
|
@ -500,8 +500,8 @@ func (f *File) getSheetXMLPath(sheet string) (string, bool) {
|
|||
}
|
||||
|
||||
// SetSheetBackground provides a function to set background picture by given
|
||||
// worksheet name and file path. Supported image types: EMF, EMZ, GIF, JPEG,
|
||||
// JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
|
||||
// worksheet name and file path. Supported image types: BMP, EMF, EMZ, GIF,
|
||||
// JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
|
||||
func (f *File) SetSheetBackground(sheet, picture string) error {
|
||||
var err error
|
||||
// Check picture exists first.
|
||||
|
@ -514,7 +514,7 @@ func (f *File) SetSheetBackground(sheet, picture string) error {
|
|||
|
||||
// SetSheetBackgroundFromBytes provides a function to set background picture by
|
||||
// given worksheet name, extension name and image data. Supported image types:
|
||||
// EMF, EMZ, GIF, JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
|
||||
// BMP, EMF, EMZ, GIF, JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
|
||||
func (f *File) SetSheetBackgroundFromBytes(sheet, extension string, picture []byte) error {
|
||||
if len(picture) == 0 {
|
||||
return ErrParameterInvalid
|
||||
|
|
|
@ -596,7 +596,10 @@ func TestAttrValToFloat(t *testing.T) {
|
|||
func TestSetSheetBackgroundFromBytes(t *testing.T) {
|
||||
f := NewFile()
|
||||
assert.NoError(t, f.SetSheetName("Sheet1", ".svg"))
|
||||
for i, imageTypes := range []string{".svg", ".emf", ".emz", ".gif", ".jpg", ".png", ".tif", ".wmf", ".wmz"} {
|
||||
for i, imageTypes := range []string{
|
||||
".svg", ".bmp", ".emf", ".emz", ".gif",
|
||||
".jpg", ".png", ".tif", ".wmf", ".wmz",
|
||||
} {
|
||||
file := fmt.Sprintf("excelize%s", imageTypes)
|
||||
if i > 0 {
|
||||
file = filepath.Join("test", "images", fmt.Sprintf("excel%s", imageTypes))
|
||||
|
|
50
styles.go
50
styles.go
|
@ -277,7 +277,7 @@ var langNumFmt = map[string]map[int]string{
|
|||
|
||||
// currencyNumFmt defined the currency number format map.
|
||||
var currencyNumFmt = map[int]string{
|
||||
164: `"CN¥",##0.00`,
|
||||
164: `"¥"#,##0.00`,
|
||||
165: "[$$-409]#,##0.00",
|
||||
166: "[$$-45C]#,##0.00",
|
||||
167: "[$$-1004]#,##0.00",
|
||||
|
@ -1491,8 +1491,8 @@ func parseFormatStyleSet(style *Style) (*Style, error) {
|
|||
//
|
||||
// Index | Symbol
|
||||
// -------+---------------------------------------------------------------
|
||||
// 164 | CN¥
|
||||
// 165 | $ English (China)
|
||||
// 164 | ¥
|
||||
// 165 | $ English (United States)
|
||||
// 166 | $ Cherokee (United States)
|
||||
// 167 | $ Chinese (Singapore)
|
||||
// 168 | $ Chinese (Taiwan)
|
||||
|
@ -1533,28 +1533,28 @@ func parseFormatStyleSet(style *Style) (*Style, error) {
|
|||
// 203 | ₡ Spanish (Costa Rica)
|
||||
// 204 | ₦ Hausa (Nigeria)
|
||||
// 205 | ₦ Igbo (Nigeria)
|
||||
// 206 | ₦ Yoruba (Nigeria)
|
||||
// 207 | ₩ Korean (South Korea)
|
||||
// 208 | ₪ Hebrew (Israel)
|
||||
// 209 | ₫ Vietnamese (Vietnam)
|
||||
// 210 | € Basque (Spain)
|
||||
// 211 | € Breton (France)
|
||||
// 212 | € Catalan (Spain)
|
||||
// 213 | € Corsican (France)
|
||||
// 214 | € Dutch (Belgium)
|
||||
// 215 | € Dutch (Netherlands)
|
||||
// 216 | € English (Ireland)
|
||||
// 217 | € Estonian (Estonia)
|
||||
// 218 | € Euro (€ 123)
|
||||
// 219 | € Euro (123 €)
|
||||
// 220 | € Finnish (Finland)
|
||||
// 221 | € French (Belgium)
|
||||
// 222 | € French (France)
|
||||
// 223 | € French (Luxembourg)
|
||||
// 224 | € French (Monaco)
|
||||
// 225 | € French (Réunion)
|
||||
// 226 | € Galician (Spain)
|
||||
// 227 | € German (Austria)
|
||||
// 206 | ₩ Korean (South Korea)
|
||||
// 207 | ₪ Hebrew (Israel)
|
||||
// 208 | ₫ Vietnamese (Vietnam)
|
||||
// 209 | € Basque (Spain)
|
||||
// 210 | € Breton (France)
|
||||
// 211 | € Catalan (Spain)
|
||||
// 212 | € Corsican (France)
|
||||
// 213 | € Dutch (Belgium)
|
||||
// 214 | € Dutch (Netherlands)
|
||||
// 215 | € English (Ireland)
|
||||
// 216 | € Estonian (Estonia)
|
||||
// 217 | € Euro (€ 123)
|
||||
// 218 | € Euro (123 €)
|
||||
// 219 | € Finnish (Finland)
|
||||
// 220 | € French (Belgium)
|
||||
// 221 | € French (France)
|
||||
// 222 | € French (Luxembourg)
|
||||
// 223 | € French (Monaco)
|
||||
// 224 | € French (Réunion)
|
||||
// 225 | € Galician (Spain)
|
||||
// 226 | € German (Austria)
|
||||
// 227 | € German (German)
|
||||
// 228 | € German (Luxembourg)
|
||||
// 229 | € Greek (Greece)
|
||||
// 230 | € Inari Sami (Finland)
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
|
@ -181,9 +181,9 @@ var IndexedColorMapping = []string{
|
|||
|
||||
// supportedImageTypes defined supported image types.
|
||||
var supportedImageTypes = map[string]string{
|
||||
".emf": ".emf", ".emz": ".emz", ".gif": ".gif", ".jpeg": ".jpeg",
|
||||
".jpg": ".jpeg", ".png": ".png", ".svg": ".svg", ".tif": ".tiff",
|
||||
".tiff": ".tiff", ".wmf": ".wmf", ".wmz": ".wmz",
|
||||
".bmp": ".bmp", ".emf": ".emf", ".emz": ".emz", ".gif": ".gif",
|
||||
".jpeg": ".jpeg", ".jpg": ".jpeg", ".png": ".png", ".svg": ".svg",
|
||||
".tif": ".tiff", ".tiff": ".tiff", ".wmf": ".wmf", ".wmz": ".wmz",
|
||||
}
|
||||
|
||||
// supportedContentTypes defined supported file format types.
|
||||
|
|
|
@ -45,7 +45,7 @@ type xlsxWorkbook struct {
|
|||
WorkbookProtection *xlsxWorkbookProtection `xml:"workbookProtection"`
|
||||
BookViews *xlsxBookViews `xml:"bookViews"`
|
||||
Sheets xlsxSheets `xml:"sheets"`
|
||||
FunctionGroups *xlsxExtLst `xml:"functionGroups"`
|
||||
FunctionGroups *xlsxFunctionGroups `xml:"functionGroups"`
|
||||
ExternalReferences *xlsxExternalReferences `xml:"externalReferences"`
|
||||
DefinedNames *xlsxDefinedNames `xml:"definedNames"`
|
||||
CalcPr *xlsxCalcPr `xml:"calcPr"`
|
||||
|
@ -171,6 +171,17 @@ type xlsxSheet struct {
|
|||
State string `xml:"state,attr,omitempty"`
|
||||
}
|
||||
|
||||
// xlsxFunctionGroup represents a single function group.
|
||||
type xlsxFunctionGroup struct {
|
||||
Name string `xml:"name,attr"`
|
||||
}
|
||||
|
||||
// xlsxFunctionGroups defines the collection of function groups for the workbook.
|
||||
type xlsxFunctionGroups struct {
|
||||
BuiltInGroupCount *int `xml:"builtInGroupCount,attr"`
|
||||
FunctionGroup []xlsxFunctionGroup `xml:"functionGroup"`
|
||||
}
|
||||
|
||||
// xlsxExternalReferences directly maps the externalReferences element of the
|
||||
// external workbook references part.
|
||||
type xlsxExternalReferences struct {
|
||||
|
|
Loading…
Reference in New Issue