Giter Site home page Giter Site logo

qax-os / excelize Goto Github PK

View Code? Open in Web Editor NEW
17.2K 238.0 1.7K 6.64 MB

Go language library for reading and writing Microsoft Excel™ (XLAM / XLSM / XLSX / XLTM / XLTX) spreadsheets

Home Page: https://xuri.me/excelize

License: BSD 3-Clause "New" or "Revised" License

Go 100.00%
xlsx golang excel microsoft office openxml go excelize spreadsheet statistics

excelize's Introduction

Excelize logo

Build Status Code Coverage Go Report Card go.dev Licenses Donate

Excelize

Introduction

Excelize is a library written in pure Go providing a set of functions that allow you to write to and read from XLAM / XLSM / XLSX / XLTM / XLTX files. Supports reading and writing spreadsheet documents generated by Microsoft Excel™ 2007 and later. Supports complex components by high compatibility, and provided streaming API for generating or reading data from a worksheet with huge amounts of data. This library needs Go version 1.18 or later. There are some incompatible changes in the Go 1.21.0, the Excelize library can not working with that version normally, if you are using the Go 1.21.x, please upgrade to the Go 1.21.1 and later version. The full docs can be seen using go's built-in documentation tool, or online at go.dev and docs reference.

Basic Usage

Installation

go get github.com/xuri/excelize
  • If your packages are managed using Go Modules, please install with following command.
go get github.com/xuri/excelize/v2

Create spreadsheet

Here is a minimal example usage that will create spreadsheet file.

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Create a new sheet.
    index, err := f.NewSheet("Sheet2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Set value of a cell.
    f.SetCellValue("Sheet2", "A2", "Hello world.")
    f.SetCellValue("Sheet1", "B2", 100)
    // Set active sheet of the workbook.
    f.SetActiveSheet(index)
    // Save spreadsheet by the given path.
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Reading spreadsheet

The following constitutes the bare to read a spreadsheet document.

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        // Close the spreadsheet.
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Get value from cell by given worksheet name and cell reference.
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Get all the rows in the Sheet1.
    rows, err := f.GetRows("Sheet1")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}

Add chart to spreadsheet file

With Excelize chart generation and management is as easy as a few lines of code. You can build charts based on data in your worksheet or generate charts without any data in your worksheet at all.

Excelize

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    for idx, row := range [][]interface{}{
        {nil, "Apple", "Orange", "Pear"}, {"Small", 2, 3, 3},
        {"Normal", 5, 2, 4}, {"Large", 6, 7, 8},
    } {
        cell, err := excelize.CoordinatesToCellName(1, idx+1)
        if err != nil {
            fmt.Println(err)
            return
        }
        f.SetSheetRow("Sheet1", cell, &row)
    }
    if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
        Type: excelize.Col3DClustered,
        Series: []excelize.ChartSeries{
            {
                Name:       "Sheet1!$A$2",
                Categories: "Sheet1!$B$1:$D$1",
                Values:     "Sheet1!$B$2:$D$2",
            },
            {
                Name:       "Sheet1!$A$3",
                Categories: "Sheet1!$B$1:$D$1",
                Values:     "Sheet1!$B$3:$D$3",
            },
            {
                Name:       "Sheet1!$A$4",
                Categories: "Sheet1!$B$1:$D$1",
                Values:     "Sheet1!$B$4:$D$4",
            }},
        Title: []excelize.RichTextRun{
            {
                Text: "Fruit 3D Clustered Column Chart",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // Save spreadsheet by the given path.
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Add picture to spreadsheet file

package main

import (
    "fmt"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        // Close the spreadsheet.
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Insert a picture.
    if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
        fmt.Println(err)
    }
    // Insert a picture to worksheet with scaling.
    if err := f.AddPicture("Sheet1", "D2", "image.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
    }
    // Insert a picture offset in the cell with printing support.
    enable, disable := true, false
    if err := f.AddPicture("Sheet1", "H2", "image.gif",
        &excelize.GraphicOptions{
            PrintObject:     &enable,
            LockAspectRatio: false,
            OffsetX:         15,
            OffsetY:         10,
            Locked:          &disable,
        }); err != nil {
        fmt.Println(err)
    }
    // Save the spreadsheet with the origin path.
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}

Contributing

Contributions are welcome! Open a pull request to fix a bug, or open an issue to discuss a new feature or change. XML is compliant with part 1 of the 5th edition of the ECMA-376 Standard for Office Open XML.

Licenses

This program is under the terms of the BSD 3-Clause License. See https://opensource.org/licenses/BSD-3-Clause.

The Excel logo is a trademark of Microsoft Corporation. This artwork is an adaptation.

gopher.{ai,svg,png} was created by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.

excelize's People

Contributors

albenik avatar alex-whitney avatar arnie97 avatar cuishuang avatar dependabot[bot] avatar dolmen avatar fsfsx avatar heiy avatar jdavidvr avatar jinhyuk-kim-ca avatar juneezee avatar lfq7413 avatar lichaofei avatar liron-l avatar mlh758 avatar nad2000 avatar naysoftware avatar ololoevreal avatar peng avatar rentiansheng avatar stanim avatar takayuki avatar teerenjing avatar thomascharbonnel avatar tvso avatar xdlrt avatar xuri avatar yicixin avatar yoshhiide avatar zhangzitao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

excelize's Issues

Feature request - access workbook `definedNames `

Great library!
One feature that would be nice, is the ability to extract the named ranges, or definedNames from an xlsx workbook or - xl\workbook.xml from the zip archive.

They are defined like this:

<definedNames>
 <definedName name="named_range_test1">Sheet1!$A$2:$C$40</definedName>
 <definedName name="named_range_test2">Sheet2!$G$2:$G$5</definedName>
</definedNames>

I use this to guide extraction of data from an excel sheet, rather than having ranges or references defined in the code - it is extracted from the workbook itself to guide parsing of cell values.

This is the openpyxl documentation of the feature for reference.

I am just learning go or would try making a pull request... am happy to help with testing though!

Thanks! 😃

Setting Value Efficiency

When setting value repeatedly with many cols, it runs very slow!

col := "A"
for i := 0; ; i++ {
	col += "A"
	xlsx.SetCellStr("Sheet1", col+"1", "a")
	fmt.Println("set value")
}

Not Working "Reading XLSX file sample"

Workbook.xlsx
I attached my test file.

I made that file and run homepage's "Reading XLSX file sample" code
I expected :
test text
1 2 ...

But i got :

1 2 ...

But when I input some values to "A?" of "Sheet1" I got the expected result.

I think cell.go's line 26
if rows <= xAxis {
return ""
}
return an empty string.

How to save text without losing formatting? Possibly enhancement.

Hi hope all is well. Great work that i'm benefiting from so thanks very much.

With .SetCellValue(), .SetCellStr(), and .SetCellInt(), they make decisions about the alignment of the result, which is not bad per se. I know i can use .SetCellStyle() afterwards. But it would be very handy to have a function that respects the existing style. I wish to be able to set all the styles i need within an Excel file as a kind of report template, outside of Go, then use Go to populate it, and not even need to know what the styles are within my Go code. For example a column that is already center-aligned, would be great if a function that can keep it center-aligned, or whatever the style might be, including font, color, date formatting, currency etc.

Something like a .SetCellValueWithStyleRetention(). Or is there already a way to achieve this with the existing functions?

GetRows() does not work on 1.8.1

% go version
go version go1.8.1 linux/amd64

Code:

package main

import (
        "fmt"
        "log"
        "github.com/Luxurioust/excelize"
)

func main() {
        xlsx, err1 := excelize.OpenFile("/tmp/1.xlsx")
        if err1 != nil {
                log.Fatal("Failed to open XLSX file: " + err1.Error())
        }

        // We will always use first sheet.
        sheet_name := xlsx.GetSheetName(1)
        log.Println("Will use sheet: '" + sheet_name + "'")

        // Read file data.
        //file_data := make(map[string]string)
        rows := xlsx.GetRows(sheet_name)
        for _, row := range rows {
                fmt.Println(row)
        }
}

Read file row by row

Is there any way to read excel by rows, like in tealeg's case:

for _, row = range sheet.Rows

in case I don't know how many rows are there?

Can't display data cell in correct way

For example,
tealeg/xlsx display the same cell as: &{ 42740 0xc420424640 mm-dd-yy false false 0 0 2}
throught it's .String() will convert to '01-05-17'

Luxurioust/excelize: just display as 42740 (already converted to string)

Pivot support

Can you please add feature:
support for pivot data source edit/change
Right now I make copy of pivot, but copy make reference to the data source, so I still required to make changes in pivot data source manually

Also it will be great to create pivot from the code, without excel application :)

Thanks in advance

Copied code

Hey,

I just came across your project and noticed there is a lot of copied code from tealeg/xlsx without attribution. Especially xmlSharedStrings.go which is a direct copy paste of tealeg/xlsx xmlSharedStrings.go, comments and all.

It's nice to see more xlsx action in the Golang world, but have you considered just contributing to tealeg/xlsx instead?

Example does not work

Hi. Example does not work. Library created bad xlsx file (in attach).
xlsx := excelize.CreateFile()
xlsx.NewSheet(2, "Sheet2")
xlsx.SetCellValue("Sheet2", "A2", "Hello world.")
xlsx.SetCellValue("Sheet1", "B2", 100)
xlsx.SetActiveSheet(2)
err = xlsx.WriteTo("Workbook.xlsx")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
Workbook.xlsx

Inserted Picture Shows Error

When read a xlsx file with complex border , Inserted picture shows error.
1494499107
1494499121
Workbook.xlsx

func main() {
	xlsx, _ := excelize.OpenFile("./Workbook.xlsx")

	err := xlsx.AddPicture("Sheet1", "A2", "./1.jpg", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
	if err != nil {
		fmt.Println(err)
	}
	err = xlsx.WriteTo("./Workbook1.xlsx")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}

Read nothing from the sample?

package main

import (
    "fmt"
    "github.com/Luxurioust/excelize"
)

func main() {
    xlsx, err := excelize.OpenFile("/home/Workbook.xlsx")
    if err != nil {
        fmt.Println(err)
    }
    cell := xlsx.GetCellValue("Sheet2", "D11")
    fmt.Println(cell)
}

Removing available formatting after adding additional (for example color).

Hello. First of all I really grateful for your work.

Don't know bug or not, but I found some strange behavior of func SetCellStyle.
If I already have some formating, for example borders, and I try to add for example red color to cell, I loosing borders.
May be it is normal, but in this way it would be useful to have func like AddCellStyle or something similar.

macOS can not use

cell := xlsx.GetCellValue("Sheet1", "B2")
fmt.Println(cell)
// Get all the rows in a sheet.
rows := xlsx.GetRows("sheet1")
fmt.Println(rows)

in windows it works normal,but in macOS rows is empty,cell can get value

Sheet name issue

Hi,

If I open a xlsx file and want to write to some cells in sheet where sheet name is not in format of "SheetX"
after xlsx file is saved, there is no entry in the cell if you open a file with Excel.
Another thing is if I use xlsx.CreateFile() I'm aware that I get only one sheet with name "Sheet1" and I can write to the cells of "Sheet1".
When I do xlsx.NewSheet(2, "Sheet2") I can write to cells in "Sheet2". But if instead od "Sheet2" I put "Test_1" for example, then if I write to some cells in this sheet, this cannot be seen in Excel.

Only workaround I found is to create new sheets with name "SheetX" then do whatever you need and before saving use xslx.SetSheetName("Sheet2", "Test_1") for example.

Memory usage on large XLSXs goes way too high

As well as in tealeg/xlsx#186, this library suffers from memory eating while trying to parse large files.

For example I have 7mb file (~60k rows with ~40 columns for each row) which parsed with tealeg/xlsx into 700mb of RAM, while this library eats almost whole gigabyte.

Any plans to provide an iterator which will be memory-friendly?

duplicate sheets

Capability to duplicate a sheet, like PowerShell/excel's $wb.sheets.item(1).copy($wb.sheets.item(2)). Perhaps something like:

// sheet at index 1 already exists...
xlsx.NewSheet(2, "sheet2")
xlsx.CopySheet(1, 2)

Merge with tealeg/xlsx ?

Feel free to delete if off-topic.

I see two reasonably popular XLSX go packages, this and tealeg/xlsx. Is it worth trying to merge to one unified effort?

Newsheet is empty SetCellValue?

$ go version
go version go1.8.1 windows/amd64

Code:

package main

import (
	"fmt"
	"os"

	"github.com/Luxurioust/excelize"
)

func main() {
	xlsx := excelize.CreateFile()
	// Create a new sheet.
	xlsx.NewSheet(2, "List")
	// xlsx.DeleteSheet("Sheet1")
	// Set value of a cell.
	xlsx.SetCellValue("List", "A1", 100)
	xlsx.SetCellValue("List", "B1", 30)
	xlsx.SetCellFormula("List", "C1", "=A1+A2")
	// Set active sheet of the workbook.
	xlsx.SetActiveSheet(2)
	// Save xlsx file by the given path.
	err := xlsx.WriteTo("./dummy.xlsx")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}

I changing "Create XLSX file Example"
But Cell is Empty...

dummy.xlsx

I Tested MS Office2007

Loosing of auto formatting rules after using UpdateLinkedValues

Hello. First of all I really grateful for your work.

Found some strange behaviour of func UpdateLinkedValue.
I have two sheets - first with real data and second with linked data from first one.
On the second sheet with linked data I use auto formatting rules. In my situation it is adding background color to cell depends on percentage, for example red background if 90% and more.

If I don't using UpdateLinkedValues I don't loose auto formatting, but linked data doesn't update.
If I using UpdateLinkedValues I loose auto formatting, but linked data updates.

Feature request: Auto filter

Hi Luxurioust,

first of all, AWESOME library. Got it up and running in no time thanks through the great documentation.

You know what would make excelize even better? Having a way to enable auto filter. I've searched around and it should be possible. See http://xlsxwriter.readthedocs.io/working_with_autofilters.html

I dug around a bit in the python source code and most of the logic is defined here https://github.com/jmcnamara/XlsxWriter/blob/master/xlsxwriter/worksheet.py#L1472 (however I don't understand a whole lot of it... ) Hopefully you do

I'm not an advanced enough go developer to create a good PR, but would be very grateful if you could add this feature to excelize.

Graphs

How can I "create" and "update" graphs in an xlsx files?

Object-oriented style

When I saw the example code, my direct reaction was that it should be in an object-oriented style:

package main

import (
    "fmt"
    "github.com/Luxurioust/excelize"
)

func main() {
    xlsx := excelize.CreateFile()

    sheet2 := xlsx.NewSheet(2, "Sheet2")
    sheet3 := xlsx.NewSheet(3, "Sheet3")

    sheet2.SetCellInt("A23", 10)
    sheet3.SetCellStr("B20", "Hello")

    err := xlsx.Save("~/Workbook.xlsx")
    if err != nil {
        fmt.Println(err)
    }
}

Can not extract Chinese data correctly

There should be three columns in the output, first and third column are Chinese characters.

data.xlsx

package main
import (
	"fmt"
	"log"

	"github.com/Luxurioust/excelize"
)

func main() {
	inF, err := excelize.OpenFile("data.xlsx")
	if err != nil {
		log.Fatalln(err)
	}

	sheet := inF.GetRows(inF.GetSheetName(1))
	for _, row := range sheet {
		fmt.Println(len(row), row)
	}
} 

Border Setting

Setting border for selected cells is a practical requirement.

Leading space(s) are missing

Hi,

When I create workbook and do some entries to the cells I noticed that if there are some leading spaces in front of the text, they are missing.
In case if I open the workbook with excel and enter some text with leading spaces they are corretly entered to the cell.

How to get a picture in a cell ?

I need import some data to mongodb and the row data have a picture need to save another path ! I don't want to upload excel and pictures two times, so how do I get a picture from the cell ? Here are my previous snippets and related links(https://github.com/tealeg/xlsx/issues/49), but there's no real solution,that made me a little anxious ! Thanks a lot !

qq20170323-173945

qq20170323-174044

qq20170324-175016

Write to file as stream row by row?

Hi,
would it be possible to have something like stream-writing to a file in case of lots of rows? Like hitting the excel sheet row limit?

I'm not so familiar with GoLang's IO, but maybe there is no problem to achieve this?

For example I have millions of rows to put in excel sheets, and it is obviously memory heavy task. The idea is to read slice of rows from data source, like 100,000 at the time, then write them to the excel file in a loop until all rows was written. In such case there would be produced either excel file with few sheets or few excel files.

The primary idea is to handle memory consumption to reasonable amounts of RAM, like few gigabytes not tens..

What's Your opinion?

Adding picture to a sheet with existing pictures

When I open an existing xlsx file and try to add a picture to a sheet which already has some pictures in it, existing pictures will be corrupted or removed and the picture I'm trying to add is not added to the sheet.

My code:

func main() {
	xlsx, err := excelize.OpenFile("./tmp.xlsx")
	if err != nil {
		log.Println(err)
	 }

	if err = xlsx.AddPicture("Sheet1", "E5", "./test.jpg", `{"x_scale": 1, "y_scale": 1}`); err != nil {
		log.Println(err)
	}

	err = xlsx.WriteTo("./Workbook.xlsx")
	if err != nil {
		log.Println(err)
		os.Exit(1)
	}
}

Base xlsx file:
tmp.xlsx

After adding the picture:
Workbook.xlsx

Can't get multiple records

By passing this test data
data.xlsx

The myread.go

package main
/*
Build: go build -o myread myread.go
run: ./my_read data.xlsx
*/
import (
	"fmt"
	"log"
	"os"

	"github.com/Luxurioust/excelize"
)

func main() {
	inF, err := excelize.OpenFile(os.Args[1])
	if err != nil {
		log.Fatalln(err)
	}

	sheet := inF.GetRows(inF.GetSheetName(1))
	for _, row := range sheet {
		fmt.Println(len(row), row)
	}
} 

expect get:
3 [日盤 12345 夜盤交易行情轉入]
3 [測 12346 行情轉入]

but get:
3 [測 12346 行情轉入]
3 [測 12346 行情轉入]

runtime error SIGSEGV on 8fbab474

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x4d96f7]

goroutine 1 [running]:
github.com/Luxurioust/excelize.(*File).formattedValue(0xc4200504b0, 0x1, 0xc4200f9982, 0x6, 0x0, 0x0)
/home/dlin/go/src/github.com/Luxurioust/excelize/cell.go:69 +0x177
github.com/Luxurioust/excelize.(*xlsxC).getValueFrom(0xc4200edd70, 0xc4200504b0, 0xc420050820, 0xc4201148d0, 0x1, 0x0, 0x2)
/home/dlin/go/src/github.com/Luxurioust/excelize/rows.go:144 +0x15b
github.com/Luxurioust/excelize.(*File).GetRows(0xc4200504b0, 0xc4200edea0, 0x6, 0xc42001159c, 0x1, 0xc4200edea0)
/home/dlin/go/src/github.com/Luxurioust/excelize/rows.go:60 +0x9e8
main.updateSheet(0xc4200504b0, 0x531640, 0x3)
/home/dlin/tmp/bug/bug.go:28 +0xd2
main.main()
/home/dlin/tmp/bug/bug.go:15 +0x6f

t.xlsx

package main

import (
"fmt"
"log"
"strconv"

"github.com/Luxurioust/excelize" // bug: Date format, can't insert value

)

func main() {
log.SetFlags(log.Lshortfile)
xl, err := excelize.OpenFile("t.xlsx")

updateSheet(xl, "Fut")

err = xl.Save()
if err != nil {
	log.Fatalln(err)
}

}
func updateSheet(xl *excelize.File, sheetName string) {

idxSheet := xl.GetSheetIndex(sheetName)
if idxSheet == 0 {
	log.Fatalln("Can't found correct sheetName:", sheetName)
}
rows := xl.GetRows("sheet" + strconv.Itoa(idxSheet))
fmt.Println(rows)

}

func GetColStr(x int) string {
colName := ""
//oldX := x
for x > 0 {
digit := (x - 1) % 26
colName = string(int('A')+digit) + colName
x = (x - 1 - digit) / 26
}
//log.Println(oldX, colName)
return colName
}

Roadmap

Thank you for your library! Great work! 👍

Do you have a roadmap for future development?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.