Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的电子表格以.xlsx扩展名保存,但却被赢得';在我将其更改为.xls之前不会发生?_C#_Excel_Xls_Xlsx_Excel Interop - Fatal编程技术网

C# 为什么我的电子表格以.xlsx扩展名保存,但却被赢得';在我将其更改为.xls之前不会发生?

C# 为什么我的电子表格以.xlsx扩展名保存,但却被赢得';在我将其更改为.xls之前不会发生?,c#,excel,xls,xlsx,excel-interop,C#,Excel,Xls,Xlsx,Excel Interop,我打开一个现有的.xlsx文件,对其进行更改,然后将其保存回磁盘。更改正在运行,但当我尝试打开文件时(手动,在Windows资源管理器中单击2次),我会得到“Excel无法打开文件'Bla.xlsx',因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。” 如果我将扩展名从“xlsx”更改为“xls”,它将正常打开。但是原始文件是.xlsx,我想保持这种方式。这是我的密码: // Open the file MSExcel.Excel.ApplicationCl

我打开一个现有的.xlsx文件,对其进行更改,然后将其保存回磁盘。更改正在运行,但当我尝试打开文件时(手动,在Windows资源管理器中单击2次),我会得到“Excel无法打开文件'Bla.xlsx',因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。”

如果我将扩展名从“xlsx”更改为“xls”,它将正常打开。但是原始文件是.xlsx,我想保持这种方式。这是我的密码:

// Open the file
MSExcel.Excel.ApplicationClass xlApp = new MSExcel.Excel.ApplicationClass();
MSExcel.Excel.Workbook xlBook = xlApp.Workbooks.Open(sourceFilename, 0, false, 5, null, null, false, MSExcel.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
MSExcel.Excel.Sheets xlSheets = xlBook.Worksheets;
MSExcel.Excel.Worksheet xlSheet = (MSExcel.Excel.Worksheet)xlSheets.Item[1];

// Change the file
MSExcel.Excel.Range priceTypeCell = (MSExcel.Excel.Range)xlSheet.Cells[7, 3];
//if (priceTypeCell.Value2.ToString() == "Price Push") <= This is probably fine, but just in case...
if (priceTypeCell.Value2.ToString().Trim().Contains("Price Push"))
{
    priceTypeCell.Value2 = "Price Type";
}

// Save the file - example code showed xlWorkbookDefault, but that either never existed or
// has been deprecated; xlWorkbookNormal is what I chose from the limited available options
xlApp.DisplayAlerts = false; // Was prompting about overwriting the existing file
xlBook.SaveAs(sourceFilename, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, Type.Missing, Type.Missing,
    false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xlBook.Close();
更新2 当我尝试使用“xlExcel9795”时,它甚至无法保存它。我得到:

System.Runtime.InteropServices.COMException was unhandled
  HResult=-2146827284
  Message=Exception from HRESULT: 0x800A03EC
  Source=Microsoft.Office.Interop.Excel
  ErrorCode=-2146827284
  StackTrace:
       at Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)
       at PricePushETLProcess.PricePushFile.ChangeColumnHeaderVal(PricePushFile ppf) in . . .

您正在将其保存为Excel 95-请参见:

将Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7更改为更新的格式

我相信最新的格式应该是Excel.XlFileFormat.xlOpenXMLWorkbook

xlBook.SaveAs(sourceFilename, Type.Missing, Type.Missing, Type.Missing,
    false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
(平底船)

IOW,而不是指定Excel文件的类型,只需在调用SaveAs()的第二个参数中指定“type.Missing”,将其保留为空或默认值即可

下面是整个该死的事情:

public void ChangeColumnHeaderVal()
{
    MSExcel.Excel.ApplicationClass xlApp = null;
    MSExcel.Excel.Workbook xlBook = null;
    MSExcel.Excel.Worksheet xlSheet = null;
    try
    {
        // Open the file
        xlApp = new MSExcel.Excel.ApplicationClass();
        xlBook = xlApp.Workbooks.Open(sourceFilename, 0, false, 5, null, null, false, MSExcel.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
        var xlSheets = xlBook.Worksheets;
        //Get the first Sheet
        xlSheet = (MSExcel.Excel.Worksheet)xlSheets.Item[1];

        // Change the file
        MSExcel.Excel.Range priceTypeCell = (MSExcel.Excel.Range)xlSheet.Cells[7, 3];
        //if (priceTypeCell.Value2.ToString() == "Price Push") <= This is probably fine, but just in case...
        if (priceTypeCell.Value2.ToString().Trim().Contains("Price Push"))
        {
            priceTypeCell.Value2 = "Price Type";
        }

        // Save the file
        xlApp.DisplayAlerts = false; // Was prompting about overwriting the existing file
        xlBook.SaveAs(sourceFilename, Type.Missing, Type.Missing, Type.Missing,
            false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        xlBook.Close();
    }
    finally
    {
        // Cleanup
        if (xlSheet != null) Marshal.ReleaseComObject(xlSheet);
        if (xlBook != null) Marshal.ReleaseComObject(xlBook);
        if (xlApp != null) xlApp.Quit();
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}
public void ChangeColumnHeaderVal()
{
MSExcel.Excel.ApplicationClass xlApp=null;
MSExcel.Excel.工作簿xlBook=null;
MSExcel.Excel.Worksheet xlSheet=null;
尝试
{
//打开文件
xlApp=new MSExcel.Excel.ApplicationClass();
xlBook=xlApp.Workbooks.Open(sourceFilename,0,false,5,null,null,false,MSExcel.Excel.XlPlatform.xlWindows,null,true,false,0,true,false,false);
var xlSheets=xlBook.Worksheets;
//拿到第一张
xlSheet=(MSExcel.Excel.Worksheet)xlSheets.Item[1];
//更改文件
MSExcel.Excel.Range priceTypeCell=(MSExcel.Excel.Range)xlSheet.Cells[7,3];

//如果(priceTypeCell.Value2.ToString()==“价格推送”),则离此还有两步之遥!
public void ChangeColumnHeaderVal()
{
    MSExcel.Excel.ApplicationClass xlApp = null;
    MSExcel.Excel.Workbook xlBook = null;
    MSExcel.Excel.Worksheet xlSheet = null;
    try
    {
        // Open the file
        xlApp = new MSExcel.Excel.ApplicationClass();
        xlBook = xlApp.Workbooks.Open(sourceFilename, 0, false, 5, null, null, false, MSExcel.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
        var xlSheets = xlBook.Worksheets;
        //Get the first Sheet
        xlSheet = (MSExcel.Excel.Worksheet)xlSheets.Item[1];

        // Change the file
        MSExcel.Excel.Range priceTypeCell = (MSExcel.Excel.Range)xlSheet.Cells[7, 3];
        //if (priceTypeCell.Value2.ToString() == "Price Push") <= This is probably fine, but just in case...
        if (priceTypeCell.Value2.ToString().Trim().Contains("Price Push"))
        {
            priceTypeCell.Value2 = "Price Type";
        }

        // Save the file
        xlApp.DisplayAlerts = false; // Was prompting about overwriting the existing file
        xlBook.SaveAs(sourceFilename, Type.Missing, Type.Missing, Type.Missing,
            false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        xlBook.Close();
    }
    finally
    {
        // Cleanup
        if (xlSheet != null) Marshal.ReleaseComObject(xlSheet);
        if (xlBook != null) Marshal.ReleaseComObject(xlBook);
        if (xlApp != null) xlApp.Quit();
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}