Excelize:うまくいけば、VBAへの最後のわら

1.はじめに

最近、ExcelizeというGoライブラリに気づきました。多くのExcel操作を提供し、MicrosoftのVBAに似ています。私はそれに興味がありますが、オンラインでの調査中に、それについて話している人はほとんどいませんでした。ExcelizeはGithub(2020年4月)ですでに5.9kの星を獲得しており、頻繁に更新されています。学ぶのに非常に有望なライブラリであると信じる理由があります。

データラングリング用に設計されていませんが、純粋なGoであり、VBAを置き換えるための良い出発点です。この記事では、通常の毎日のワークフローで優れていることを示します。データを読み取り、いくつかの変更を行い、データを要約します(ピボットテーブル)。

 

2.インストール

excelize Githubのページ(ここを開く  )では、goのコマンド「go get github.com/360EntSecGroup-Skylar/excelize」を使用すると非常に簡単です。

ただし、コマンドが機能しない「理由」がある場合は、次のように手動でexcelizeをインストールできます。

  • excelizeのクローンまたはダウンロード。
  • 「golang.org \ x \ net」と「golang.org \ x \ text」を複製またはダウンロードしてください。これらは、Excelの依存関係ライブラリです。

 

3.データを読み取る

xlsxファイルに焦点を当てます。現時点では、Excelにはcsvファイルを読み取る機能がありません。Goではcsvファイルの読み取りはそれほど難しくないため、これはデザイナーの目的かもしれません。その上、少なくとも状況では、csvファイルをxlsxファイルに手動で変更できます。

例として、以下のようにstocks.xlsxファイルを使用します。

メインパッケージ

インポート(
	"FMT" 

	"" github.com/360EntSecGroup-Skylar/excelize 

{main()のFUNC 
	ERR、ファイルを:= excelize.OpenFile( "stocks.xlsx")
	!ERRなら=ゼロ{ 
		パニック(ERR)
	} 
	//セルを
	行ごとにデータセルを出力、err:= file.GetRows( "stocks")
	if err!= nil { 
		panic(err)
	} 
	for _、row:= range rows { 
		for _、colCell:= range row { 
			fmt .Print(colCell、 "\ t")
		} 
		fmt.Println()
	} 
}

コンソールでは、次のような出力を確認できますが、今のところ十分です。 

  

 

3.いくつかの変更を行います

これらの会社を分類する列をデータに追加したいと思います。たとえば、AAPLとMSFTをターゲット、CSCOをターゲット外とラベル付けしたいとします。 

Pythonパンダでは、データをフィルタリングしてラベルを付けるのと同じくらい簡単です。 

さて、エクセルイズで何ができるでしょうか?

ExcelizeにはAutoFilter()と呼ばれる関数があります。VBAのオートフィルター機能にちなんで名付けられたと思います。 

メインパッケージ

のインポート(
	"github.com/360EntSecGroup-Skylar/excelize" )

メインFUNC(){ 
	= excelize.OpenFile( "stocks.xlsx"):ファイル、ERRを
	!ERR = nilの{場合
		パニック(ERR)
	} 
	//オートフィルタ機能しない
	err = file.AutoFilter( "stocks"、 "A1"、 "F11"、
		`{" column ":" D "、" expression ":" Symbol == AAPL or Symbol == MSFT "}`)
	errの場合!= nil { 
		panic(err)
	} 
	file.SaveAs( "stocks_filter.xlsx")
}

 

この関数の良い部分は、正確な範囲のデータを必要としないことです。この例では、データ範囲は「A1:D10」ですが、「A1:F11」を使用すると問題なく動作します。

ただし、この関数は実際にデータを必要に応じてフィルタリングするようには見えません。Excelizeのドキュメントでは、次のように記述されています。

/ *フィルター条件を指定するだけでは不十分です。フィルター条件に一致しない行も非表示にする必要があります。行はSetRowVisible()メソッドを使用して非表示になります。* /

しかし、通常はどの行を非表示にする必要があるかわかりません。そのため、この機能はどういうわけか私には奇妙です。

また、このオートフィルター機能には、VBAのオートフィルターと同様に、フィルター条件が2つしかないという悪い点があります。また、Excelizeには、3つ以上の条件をフィルタリングするVBAのAdvancedFilter関数がありません。

いくつかのforループを使用して、フィルターの目的を達成できます。多分それは低レベルのハードコードですが、今のところ実際には問題なく動作します。

メインパッケージ

インポート(
	"のStrConv" 
	"" github.com/360EntSecGroup-Skylar/excelize 

{main()のFUNC 
	ERR、ファイルを:= excelize.OpenFile( "stocks.xlsx")
	!ERRなら=ゼロ{ 
		パニック(ERR)
	} 
	file.SetSheetRow( "stocks"、 "E1"、&[] string {"Cat"})
	行、err:= file.GetRows( "stocks")
	if err!= nil { 
		panic(err)
	} 
	for i:= 0; i <len(rows); i ++ { 
		for j:= 0; j <len(rows [i]); j ++ { 
			if rows [i] [j] == "AAPL" || rows [i] [j] == "MSFT" { 
				file.SetCellValue( "stocks"、 "E" + strconv.Itoa(i + 1)、 "Target"
				file.SetCellValue( "stocks"、 "E" + strconv.Itoa(i + 1)、 "Untarget")
		} 
	} 
	file.SaveAs( "stocks_filter2.xlsx")
}

  

 

 4.データの要約(ピボットテーブル)

 AddPivotTable関数では、DataRangeは正確な範囲である必要がありますが、Pivo​​tTableRangeはカジュアルでも1つのセルより大きくすることができます。

メインパッケージ

のインポート(
	"github.com/360EntSecGroup-Skylar/excelize" 

主FUNC(){ 
	= excelize.OpenFile( "stocks.xlsx")ファイル、ERRを
	!ERR =ゼロ{場合
		パニック(ERR)
	} 
	ファイルERR = .AddPivotTable(&excelize.PivotTableOption { 
		DataRange: "stocks!$ A1:$ D10"、
		PivotTableRange: "stocks!$ G1:G2"、
		Rows:[] excelize.PivotTableField {{Data: "Symbol"}、{Data: "日付 "}}、
		データ:[] excelize.PivotTableField {{Data:" Close "、小計:" Average "}、
	}})
	if err!= nil { 
		panic(err)
	} 
	file.SaveAs(" stocks_pivot.xlsx " )
}

  

 

Summay

ExcelizeとVBAを比較すると、実際にはそれほど公平ではありません。VBAはMicrosoftによって30年近く開発されてきましたが、このオープンライブラリは何とか新しいものです。

この記事の簡単なテストのために、それはいくつかの弱点を明らかにします。たとえば、オートフィルター機能はVBAほど悪いわけではありません。

かなり言えば、excelizeの準備はできていませんが、近い将来、その価値が証明されるでしょう。あなたがそれに興味があるなら、githubのページは貢献のために開いていると言います。

詳細については、ドキュメント(こちら)およびgithub(こちら)を参照してください。

 

  

 

おすすめ

転載: www.cnblogs.com/drvongoosewing/p/12644222.html