【发布时间】:2020-07-27 03:35:49
【问题描述】:
我不明白为什么这不适用于 XLTX 文件。我的代码与 XLSX 文件配合得很好。
/// <summary>
/// Copies the template file and renames the new one.
/// </summary>
/// <param name="sourceFilePath"></param>
private void CopyTemplateFile(string sourceFilePath)
{
string strSheetName = "";
DialogResult result;
result = MyDialog.ShowDialog("New File - Dialog", "Bitte Name eingeben", "Neue Datei erstellen?", "=FOR1+RBT1", "Ok", "Cancel", ref strSheetName);
if (result == DialogResult.Yes)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel Template (*.xltx)|*.xltx|Excel File (*.xlsx)|*.xlsx";
sfd.FileName = strSheetName;
DialogResult ergebnis = sfd.ShowDialog();
if (ergebnis == DialogResult.OK)
{
string path = sfd.FileName;
//string tmp = path.Substring(path.LastIndexOf('\\')+1);
System.IO.File.Copy(sourceFilePath, path);
Excel.Application app = new Excel.Application();
Excel.Workbook wb = app.Workbooks.Open(path, ReadOnly: false);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);
ws.Name = strSheetName;
ws.Range[Statics.ANLAGE_ORT_CELL].Cells.Value2 = "'" + strSheetName;
string stAnlage = strSheetName.Substring(1);
string[] abc = stAnlage.Split('+');
ws.Range["A50"].Cells.Value2 = abc[0];
ws.Range["B50"].Cells.Value2 = abc[1];
wb.SaveAs(path);
wb.Close();
app.Quit();
Marshal.ReleaseComObject(app);
}
}
}
我正在使用 Microsoft.Office.Interop.Excel,sourceFilePath 的打开文件对话框,path 的保存文件对话框。如果使用 XLTX,则不会保存 sheet.name 和单元格值的更改。
也许你们当中有人知道这个问题。
【问题讨论】:
-
你运行
wb.SaveAs()却没有给出路径? Excel 怎么知道保存在哪里呢?所以它应该是wb.Save()或为SaveAs()提供路径(和文件名)。 -
哦,对不起。它是 wb.Save() 但在某处我看到了一个没有路径的 wb.SaveAs() 解决方案,我试了一下。但这也没有用。
-
你试过
SaveAs指定路径和fileformat(xlOpenXMLTemplate)吗?那应该确实有效。查看Workbook.SaveAs method 的文档 -
得到了 COMException:附加信息:此扩展名不能与所选文件类型一起使用。在“文件名”文本框中更改文件扩展名,或通过更改“另存为”选项来选择不同的文件类型。
-
请再次查看我的第二条评论并阅读链接的文档。
wb.SaveAs(path);指定路径但不指定文件格式!您需要正确指定两者。如果文件名以.xltx结尾,则文件格式必须为xlOpenXMLTemplate。