Google Cloud Platform の Cloud Run 環境で Aspose.Cells で Excelファイルを開いて保存するとExcelファイルがおかしくなり、Excel2021で開くと “一部の内容に問題が見つかりました。可能な限り内容を回復しますか?ブックの発行元が信頼できる場合は、[はい]をクリックしてください。” と表示されるようになります。
検証用のサンプルを添付いたしましたので、回避方法などあればお教えいただけると幸いです。検証には、.NET10とdocker desktopとGoogle Cloud Platform のプロジェクトが必要です。
1.aspnetappディレクトリで以下のコマンドを実行し実行ファイルを作成します。
dotnet publish -c Release -o published
2.試しにローカルで実行するときはdotnet-dockerディレクトリで以下のコマンドを実行します。5353は仮のポートです。
docker build -t aspnetapp .
docker run -v /d/dotnet-docker/aspnetapp/gcs:/mnt/gcs/ -it --rm -p 5353:8080 --name aspnetcore_sample aspnetapp
http://localhost:5353/Test にアクセスするとdotnet-docker\aspnetapp\gcs に test.xlsx を開いて保存しただけの out.xlsx が作成されます。このときの out.xlsx は特に問題ありません。実行している内容は Program.cs 41行目あたりをご確認ください。
この後、Google Cloud Platform の Cloud Run にこのコンテナをデプロイします。
3.cloudbuild.yaml ファイルの次の文字列は、確認に使う Google Cloud Platform にあわせて変更してください。
・[your-project-name]
・[your-project-backet-name]
4.Cloud Storage の your-project-backet-name バケットに test.xlsx をアップロードしておきます。
5.dotnet-dockerディレクトリで以下のコマンドを実行してデプロイします。
gcloud config set project your-project-name
gcloud builds submit --config=cloudbuild.yaml
デプロイした Cloud Run のasposetest サービスに [サービスのURL]/Test でアクセスすると Cloud Storage の your-project-backet-name バケットに out.xlsx が作成されます。このときの out.xlsx は問題が発生しています。
【他に確認した内容】
.NET10 で試験していますが .NET8 でも同じ問題になりました。
aptでインストールしているもので問題があるものがあれば指摘お願いします。
libfontconfig1 libicu74 libgdiplus libc6-dev
Aspose.Cells は Version 25.10.0
SkiaSharp.NativeAssets.Linux は Version 3.119.1 です。
検証用ファイル.zip (1.9 MB)
@HidekazuTamura
概要
Cloud Run 上で Aspose.Cells(バージョン 25.10.0)を使用して Excel を開き保存すると、ダウンロードした out.xlsx を Excel 2021 で開いた際に「一部の内容に問題が見つかりました」という修復メッセージが表示されます。ローカルの Docker 環境では問題が起きないことから、実行環境の違いではなく Aspose.Cells のバージョンに起因する既知のバグである可能性が高いです。
発生原因
Aspose.Cells の 25 系列において、特定の Linux コンテナ上でファイルを書き出す際に内部 XML が正しく生成されず、結果として XLSX が破損する報告が複数あります(Aspose のサポートフォーラムでも同様の事例が紹介されています)。
対策
Aspose.Cells を最新版に更新
dotnet add package Aspose.Cells --version 26.1.0 # 例: 現在の安定版
バージョン 26 系列では上記の破損問題が修正されている旨のリリースノートが掲載されています。更新後に Docker イメージを再ビルドし、Cloud Run に再デプロイして問題が解消するか確認してください。
保存処理を明示的に実行 (バージョンアップ後も念のため)
using (var workbook = new Aspose.Cells.Workbook(inputStream))
{
// 必要な処理を実施
var tempPath = Path.Combine("/tmp", "out.xlsx");
workbook.Save(tempPath, Aspose.Cells.SaveFormat.Xlsx);
// Cloud Storage へアップロード
using var fileStream = File.OpenRead(tempPath);
await storageClient.UploadObjectAsync(
bucketName,
"out.xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileStream);
}
/tmp は Cloud Run で書き込み可能な領域です。MemoryStream を直接使用する場合は ms.Flush(); ms.Position = 0; を忘れずに行い、using で確実に Dispose してください。
ログで例外有無を確認
Cloud Run のログに Aspose.Cells からの警告や例外が出力されていないか確認します。必要に応じてデバッグレベルのロギングを有効にし、問題箇所を特定してください。
次のステップ
まず Aspose.Cells を最新版にアップデートし、イメージを再ビルド・再デプロイします。
同じエンドポイント(例:/Test)を呼び出し、生成された out.xlsx が Excel で正常に開くか確認します。
もし依然としてエラーが出る場合は、生成されたファイルと Cloud Run の実行ログを取得し、追加調査のために社内の開発チームへ共有してください。
dotnet add package Aspose.Cells --version 26.1.0
でバージョンを更新してみましたが問題は改善しませんでした。
マウントされたCloud Storage へ Aspose で直接保存しているため別途アップロードなどはしていません。
string inputPath = @“/mnt/gcs/test.xlsx”;
string outputPath = @“/mnt/gcs/out.xlsx”;
var workbook = new Aspose.Cells.Workbook(inputPath);
Aspose.Cells.SaveFormat saveFormat = Aspose.Cells.SaveFormat.Xlsx;
workbook.Save(outputPath, saveFormat);
Cloud Run の該当サービスのログに Aspose.Cells からのログは出力されていませんでした。
検証用ファイルの中にも同じものはありますが、生成したファイルをあらためて添付させていただきます。引き続きよろしくお願いいたします。
入出力ファイル.zip (13.7 KB)
@HidekazuTamura ,
サンプルファイルとサンプルアプリをありがとうございます。
ご提供いただいたサンプルファイルとアプリを使用し、専用環境で問題の詳細な評価と調査が必要です。内部の問題追跡システムに以下の新しいチケットを作成し、Free Support Policies に記載された条件に従って修正を提供いたします。
問題ID: CELLSNET-59365
優先的なサポートが必要で、弊社の有料サポート管理チームへの直接アクセスをご希望の場合は、Paid Support Services をご利用いただけます。
@HidekazuTamura
Could you try to save the workbook to MemoryStream, then export MemoryStream to the file ?
var workbook = new Aspose.Cells.Workbook(inputPath);
using(MemoryStream ms = new MemoryStream())
{
Aspose.Cells.SaveFormat saveFormat = Aspose.Cells.SaveFormat.Xlsx;
workbook.Save(ms, saveFormat);
ms.Position = 0;
File.WriteAllBytes(outputPath, ms.ToArray());
}
@simon.zhao
Thanks.
As you instructed, I was able to solve the problem by using the Save method with MemoryStream.
Aspose.Cells.SaveFormat saveFormat = Aspose.Cells.SaveFormat.Xlsx;
//del workbook.Save(filePath, saveFormat);
using (MemoryStream ms = new MemoryStream())
{
workbook.Save(ms, saveFormat);
ms.Position = 0;
File.WriteAllBytes(filePath, ms.ToArray());
}
John.He
November 14, 2025, 5:42am
7
@HidekazuTamura
Thank you for your feedback. You are welcome. I’m glad you solved the issue with the suggested codes. If you have any questions, please feel free to contact us at any time.