【问题标题】:How read XLS file from gcp bucket如何从 gcp 存储桶中读取 XLS 文件
【发布时间】:2019-12-10 21:30:33
【问题描述】:

我有存储桶XLS 文件,我必须提取文件并读取流上的数据并处理数据。我使用CSV 文件,这是我的代码:

try (ReadChannel reader = storage.reader(bucketName, fileName)) {   
            ByteBuffer bytes = ByteBuffer.allocate(BUFFER_SIZE);
            while (reader.read(bytes) > 0) {
                bytes.flip();
                // outChannel.write(bytes);
                set(new String(bytes.array(), "UTF-8"), fileName); 
                bytes.clear();
            }
        }

【问题讨论】:

  • 从云存储中获取 xls 文件的步骤应与获取 csv 文件相同。当您尝试获取 xls 文件时遇到什么问题?

标签: java spring-boot google-cloud-platform


【解决方案1】:

我认为这可能是您正在寻找的。 GCS Input Channel

GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename fileName = new GcsFilename("TestBucket", "Test1.xlsx"); 
GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE);
InputStream inputStream = Channels.newInputStream(readChannel);

我还发现了一个有趣的解决方法,可能会对您有所帮助,在这个 answer 中,您有一段代码可以将所有 excel 文件转换为 CSV,以便您可以正常操作它们。

编辑:错误在那里,因为它没有被初始化。看看我的代码编辑。

据我了解,在您的情况下,您可能需要使用“OutputChannel”而不是“InputChannel”,但它是相同的概念。

希望这会有所帮助。

【讨论】:

  • 好的,谢谢。你能解释一下gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE);这是什么吗?
  • 在这里您可以更好地解释 openPrefetchingReadChannel cloud.google.com/appengine/docs/standard/java/… 的作用。
  • 当我复制 gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE); 时出现错误:gcsService cannot be resolved
  • 我有错误:java.util.concurrent.ExecutionException: java.io.IOException: java.lang.NullPointerException 将 inputStream 添加到:XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFSheet sheet = workbook.getSheetAt(0); Row row = sheet.getRow(1);
  • 问题显然在于您尝试检索但未正确指向的内容。我不确定问题到底出在哪里。我想你没有正确到达工作表。您可以尝试的另一件事是直接从存储桶下载 XLS,然后读取它并操作数据/流。试试看。
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 2020-03-04
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多