我试图解析一个Excel文件并使用Excelize处理它。我只有一个URL链接,可以用来访问该文件。
对于我的情况,我使用上传到Dropbox的文件进行测试。来自dropbox的url类似于这个www.dropbox.com/s/t537135761/filename.xlsx,但是当我尝试使用这个链接时,Excelize抛出了这个错误:
open: www.dropbox.com/s/t537135761/filename.xlsx: no such file or directory该文件本身已经向公众开放。我可以在匿名模式下浏览它,这意味着它并不是因为访问受限。它在URL上有扩展名文件,所以我假设URL接触到了可由Excelize解析的实际文件
我不确定问题是在Dropbox本身还是在Excelize上,但这只是我可以用来测试代码的云存储。
谁能告诉我如何使用精益打开文件使用URL链接?我试着搜索另一个函数,但什么也找不到。
这是我的测试代码(简化)。
package main
func main() {
var urlLink = "www.dropbox.com/s/t537135761/filename.xlsx"
exlz, err := excelize.OpenFile(urlLink)
if err != {
fmt.Println(err)
return
}
defer func() {
if err = exlz.Close(); err != nil {
fmt.Println(err)
}
}
return
}发布于 2022-09-23 18:35:00
这是解决办法,下面的解释。
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
excelize "github.com/xuri/excelize/v2"
)
func main() {
// note here the 1 at the end instead of 0 in your original link
openURL("https://www.dropbox.com/s/8ngoie6spyga8k1/for%20testing.xlsx?dl=1")
}
func openURL(urlLink string) {
data, err := getData(urlLink)
if err != nil {
panic(err)
}
// Open the ZIP file with Excelize
exlz, err := excelize.OpenReader(bytes.NewReader(data))
if err != nil {
fmt.Println("Reader", err)
return
}
lst := exlz.GetSheetList()
if len(lst) == 0 {
fmt.Println("Empty document")
return
}
fmt.Println("Sheet list:")
for _, s := range lst {
fmt.Println(s)
}
defer func() {
if err = exlz.Close(); err != nil {
fmt.Println(err)
}
}()
fmt.Println("Done")
}
func getData(url string) ([]byte, error) {
r, err := http.Get(url)
if err != nil {
panic(err)
}
defer r.Body.Close()
return ioutil.ReadAll(r.Body)
}对于URL,您需要首先实际获取数据。
第二个问题是,您使用的Dropbox链接并不返回实际的Excel,而是返回一个包含Excel的HTML文件。
您需要在最后更改dl=1。这将给出实际的Excel文件。
https://stackoverflow.com/questions/73827326
复制相似问题