【发布时间】:2021-12-11 23:41:05
【问题描述】:
我正在使用Open XML SDK 2.14.0 创建 Excel 文件。 如果我将 Open XML SDK 生成的 XLSX 文件上传到 Google 电子表格,它会将文件作为 XLSX 文件打开,但如果我在电子表格中进行任何更改,那么 Google 电子表格会将文件类型更改为 XLSM。
下面的简约代码 (found in the official documentation) 重现了我遇到的问题。它在C:\Temp 中生成一个foo.xlsx 文件。
var filepath = @"C:\temp\foo.xlsx";
// Create a spreadsheet document by supplying the filepath.
// By default, AutoSave = true, Editable = true, and Type = xlsx.
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
如果我将生成的文件上传到 Google 电子表格,它会显示这是一个 XLSX 文件。
但如果我更改工作簿中的任何内容,Google 电子表格会将文件类型更改为 XLSM。
如果我从 MS Excel (Office 360) 生成一个空工作簿,我没有这个问题:如果我更改数据,Google 电子表格将不会更改文件类型。
为什么 Google 电子表格在 Open XML SDK 生成的 XLSX 文件中会出现这样的行为? 我应该怎么做才能使用 Open XML SDK 生成一个未通过 Google 电子表格转换为 XLSM 的 XLSX 文件?
【问题讨论】:
-
在您的情况下,mimeType 在编辑您的 XLSX 文件之前和之后是否发生了变化?
-
感谢您的评论。我刚刚运行了提供的代码,将文件上传到 Google 电子表格并进行了更改。我没有明确更改任何 mimeType。我不确定你的问题。如何更改文件的 mimeType 并检查 mime 类型是否已更改?
-
感谢您的回复。我带来的不便表示歉意。关于
How could I change the mimeType of the file的问题1,我无法测试您的情况。但在 Google Drive,Drive API 或许能够改变它。关于你could I check if the mime type has changed ?的问题2,作为一个简单的方法,你可以通过Drive API的“Try this API of "Files: get"来查看文件的mimeType。Ref -
调用Drive API需要有一个GCP账号和配置一堆东西,我对GCP不熟悉。我不确定这会有什么帮助。我只是像基本用户一样使用 Google 电子表格。也就是说,如果我使用 Chrome 开发工具,我可以看到 XLSX 和 XLSM 文件都具有相同的 mime 类型:“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”。
-
感谢您的回复。看来
XLSX和XLSM的mimeTypes是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet和application/vnd.ms-excel.sheet.macroEnabled.12。从您的回复中发现,即使将显示扩展名从XLSX更改为XLSM,在编辑前后mimeType 也没有改变。从这种情况来看,我认为这可能是一个错误。那么如何向Google issue tracker 报告您的情况?因为我在问题跟踪器中找不到这个问题。