需要 zip 存档条目中的 io.ReaderAt(该条目是嵌套的 .xlsx 文件)

2023-12-20

让我以这样的事实作为这个问题的序言:我已经知道 Excel 2007 文件本身就是一个 .zip 文件,已重命名为 .xlsx。

好吧,既然你知道了,事情就是这样。我正在尝试从内存中的 .zip 存档中提取 Excel 2007 文件。我不能(更确切地说,我really不想)将整个存档提取到磁盘,然后从那里使用 .xlsx 文件。

问题是我们读取excel 2007文件的方法需要一个ReadAt方法(比如定义的io.ReaderAt http://golang.org/pkg/io/#ReaderAt)。不幸的是,archive/zip 包公开了一个接口zip 文件条目 http://golang.org/pkg/archive/zip/#File.Open只回馈io.ReadCloser http://golang.org/pkg/io/#ReadCloser.

有什么办法可以解决这种情况吗?同样,我想在内存中完成这一切,而不刷新到磁盘。


由于 ZIP 格式不允许在不首先解压缩整个文件的情况下实现 ReadAt,因此您需要这样做。

这并不意味着您必须将其保存到磁盘,而是您可以将其解压缩到内存并从那里使用Reader in the bytes包裹:

// ReadAll reads from readCloser until EOF and returns the data as a []byte
b, err := ioutil.ReadAll(readCloser) // The readCloser is the one from the zip-package
if err != nil {
    panic(err)
}

// bytes.Reader implements io.Reader, io.ReaderAt, etc. All you need!
readerAt := bytes.NewReader(b)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要 zip 存档条目中的 io.ReaderAt(该条目是嵌套的 .xlsx 文件) 的相关文章

  • Go 编程 - 使用指针绕过访问权限

    假设我的项目有以下层次结构 fragment fragment go main go 并且在fragment go我有以下代码 只有一个 getter 没有 setter package fragment type Fragment str
  • 无法封送,(实现encoding.BinaryMarshaler)。具有多个对象的 go-redis Sdd

    我有下面一段代码 我试图将一个数组添加到 redis 集中 但它给了我一个错误 package main import encoding json fmt github com go redis redis type Info struct
  • 从 Go Slice 中选择一个随机值

    情况 我有一些值 需要从中随机选择一个值 然后我想将它与固定字符串连接起来 到目前为止 这是我的代码 func main create the reasons slice and append reasons to it reasons m
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程
  • go 中的属性更改通知

    如何在 go 中向多个接收器发出 属性 更改信号 类似于在 Qt 中使用通知信号定义属性的方式 例如 如果您想象有一些值需要以多种方式显示 例如进度值可以同时显示为进度条和文本 当基础值发生变化时 两者都需要更新 一种方法可能是利用chan
  • Java Zip 文件系统提供程序:远程驱动器上的只读 [Windows]

    我有一个问题Zip 文件系统提供商 http docs oracle com javase 7 docs technotes guides io fsp zipfilesystemprovider html 如果 zip 文件位于远程驱动器
  • Go MSSQL 连接

    如何提供 MSSQL 连接 它说它始终与代码相关 即使信息不正确 也不会报错 package main import database sql fmt github com denisenkom go mssqldb log var ser
  • Go SQL查询不一致

    我在执行查询时遇到一些非常奇怪的不一致 并且想知道是否有人知道原因 想象一下我有一个定义如下的结构 type Result struct Afield string db A Bfield interface db B Cfield str
  • 无法在 Gradle 中创建 Zip 存档

    我正在尝试创建一个简单的 Zip 存档 其中包含资源目录中的所有 javascript 文件 这是代码 task zip type Zip from resources include js into resources 由于某种原因 这似
  • 如何在 Go 中表示可选字符串?

    我希望建模一个可以有两种可能形式的值 不存在或字符串 执行此操作的自然方法是Maybe String or Optional
  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • 从压缩文件中获取图像的高度和宽度

    getNameIndex i 我目前正在使用 zip 存档函数来提取一些图像 我正在寻找一种方法来给出每个单独图像的文件路径 以便我可以使用 getimagesize 来获取宽度和高度 下面是正在使用的方法循环遍历文件 chapterZip
  • 是否支持动态变量?

    我想知道Go中是否可以动态创建变量 我在下面提供了一个伪代码来说明我的意思 我将新创建的变量存储在切片中 func method slice make type for i 0 i lt 10 i var variable i i slic
  • 我们如何在 Golang 中组合多个错误字符串?

    我是 golang 新手 我的应用程序需要在循环中返回多个错误 稍后需要组合并作为单个错误字符串返回 我无法使用字符串函数来组合错误消息 在返回之前可以使用什么方法将这些错误合并为一个错误 package main import fmt s
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • 在压缩存档内的文本文件上运行“head”,而不解压存档

    问候 我接手了之前的团队并编写了处理 csv 文件的 ETL 作业 我在 ubuntu 上结合使用 shell 脚本和 perl csv 文件很大 它们以压缩档案形式到达 解压后 很多都超过 30Gb 是的 那是 G 旧进程是在 cron
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器

随机推荐

  • 正确使用 IdUDPClient.ReceiveBuffer

    感谢您的帮助 我正在将旧版本的 Delphi 转换为 XE5 但我遇到了 Indy 组件的问题 需要使用IdUDPClient ReceiveBuffer 这是我的代码 while not Terminated do begin try l
  • 在整个站点使用 SSL [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我考虑的是为整个网站使用 SSL 而不是只选择几个页面进行 HTTPS 访问 这样做会有什么缺点 我希望允许社交服务登录 例如 Facebook
  • 从 Python 发送 HTTP POST 请求(尝试从 PHP 转换)

    我正在尝试将此代码片段从 PHP 转换为 Python 编程新手 但发现这样做很困难 我尝试转换的 PHP 如下 fp fsockopen whmcsurl 80 errno errstr 5 if fp querystring forea
  • 如何通过 __getattr__ 将参数传递给函数

    考虑以下代码示例 python 2 7 class Parent def init self child self child child def getattr self attr print Calling getattr attr i
  • ViewPager 上的左右箭头指示器

    我想在 ViewPager 上显示左右箭头 以指示滑动 我在 ViewPager 元素上添加了两个 ImageButton 但这些区域随后阻止 ViewPager 触发 滑动 我还希望按下这些箭头来触发片段相应地改变 简而言之 ImageB
  • 对具有 DI 依赖项的类进行玩笑模拟

    各种 Jest 文档显示了 自动 模拟 手动 模拟或ES6级 https jestjs io docs en es6 class mocks html模拟 在构造函数中实例化依赖项 但我想使用 DI IOC 并将依赖项注入到 ctor 中
  • 在资源中移动 .lproj 文件

    我正在尝试开始对一个项目进行本地化 并且我已经有了 Localized strings 的英文版本 我现在尝试将法语添加到该文件中 这将创建一个 fr lproj 文件夹 正如我所期望的那样 但是 它将它放在我的项目根目录中 我希望它位于我
  • 如何在 Firefox 中从剪贴板获取数据

    我想在元素上触发 onpaste 事件以检索剪贴板中的数据 我想检查剪贴板中是否存在图像并将其上传到服务器中 它在 Chrome 上完美运行 textarea 0 onpaste function event var items event
  • MVC .NET Core Web API XML 或 JSON

    我想创建一个以 XML 或 JSON 形式返回数据的 Web 应用程序 我该如何执行此操作 该模型 namespace ReturningJSONandXML Models public class SomeImportantInforma
  • VLCJ 创建多个视频面板

    我正在使用 vlcj 创建多个视频面板 对于每个视频窗口我应该添加代码 factory0 new MediaPlayerFactory mediaPlayer0 factory0 newEmbeddedMediaPlayer mediaPl
  • Python:限制pandas DataFrame打印列的宽度

    我正在尝试打印 pandas DataFrame 其中一列太宽 它是一根很长的字符串 要打印我正在使用tabulate图书馆 但是当它被打印时 它会在很长的一行中显示所有列的全部内容 这是我所看到的 row name review
  • 当我使用 services.msc 启动服务器时,打印在 tomcat 中不起作用(从客户端我们无法打印)

    我在用贾斯珀报告 1 3 1打印报告 我出于开发目的而使用 eclipse 和 tomcat 在 Eclipse 中 当我运行应用程序时 下面的代码将显示列出的打印机设备和打印按钮 如果我单击打印按钮 则报告将由选定的设备打印 PrintR
  • 如何在给定线的起点和终点的情况下找到箭头尖端点

    假设您有一条具有起点 x1 y1 和终点 x2 y2 的线 为了在直线上绘制箭头帽 在 Objective c 中 我需要在给定箭头角度 45 度 和长度的情况下找到箭头的点 x3 y3 x4 y4 箭头 h 那么给定 x1 y1 x2 y
  • IE 如何确定站点是 Internet 站点还是 Intranet 站点?

    在 IE 中 人们可以使用安全设置对话框来决定网站是呈现为互联网站点还是内部网站点 我的问题是 在 IE 9 或 10 中如何判断当前加载的页面是 Internet 还是 Intranet 因为我找不到像 IE 7 或 8 中那样的状态栏
  • 在各种状态下选择放置在输入之前的标签

    输入的状态如下 focus and valid 我想为该输入绘制标签以反映这一点 问题是我的输入表单需要如下所示 Field title input Field title input 并且似乎无法根据输入状态选择字段标题 这 and 选择
  • 在 PHP 中访问大数组

    我一直在对 PHP 中访问大型数据数组的不同方法进行一些分析 用例非常简单 我们的一些工具将数据作为关联数组输出到 PHP 文件中 并且这些文件被应用程序视为静态数据 我们制作游戏 因此数据文件的一些示例将包括目录中的项目 用户必须完成的任
  • FDPhysFBDriverLink 在 VendorLib 路径中表现异常

    我正在使用 FireDAC 和 Firebird 3 0 启动我的第一个应用程序 但遇到了这个奇怪的问题FDPhysFBDriverLink 设置它需要您设置VendorHome and VendorLib使驱动程序链接正常工作 当我设置它
  • 从“Y-m-d H:i:s”格式的日期数组中获取最新日期

    我有日期数组Y m d H i s格式如下 array 5 0 gt string 19 2012 06 11 08 30 49 1 gt string 19 2012 06 07 08 03 54 2 gt string 19 2012
  • 解释一下awakeFromNib和initwithFrame:用法

    我正在 iTunes 上浏览斯坦福 iPhone 开发讲座 并在第 5 讲中遇到了这一点 我们正在努力确保在设备旋转时进行重绘 我有两个与此相关的问题 What is awakeFromNib 其余代码中没有调用此方法 是如何触发的呢 里面
  • 需要 zip 存档条目中的 io.ReaderAt(该条目是嵌套的 .xlsx 文件)

    让我以这样的事实作为这个问题的序言 我已经知道 Excel 2007 文件本身就是一个 zip 文件 已重命名为 xlsx 好吧 既然你知道了 事情就是这样 我正在尝试从内存中的 zip 存档中提取 Excel 2007 文件 我不能 更确