• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 322
  • Last Modified:

How do I save data to a specific version of Excel in C#?

Below I have attached my present code which works fine, but saves data to an unrecognized Excel format.  When opening the file in Excel, the following error is produced:

"The file you are trying to open, 'filename.xls', is in a different format than specified by the file extension.  Verify that the file is not corrupted and is from a trusted source before opening the file.  Do you want to open the file now?"

Answering "Yes" causes the file to open normally.  But, I have another application that reads in Excel files and this format issue prevents the import of Excel data.  

Trying different parameters for the key line:

m_objBook.SaveAs(m_strSampleFolder + todaysDate + OrgSelection + ".xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);

has not yet revealed the solution.  Thoughts?

//************************************* The following code creates an excel spreadsheet and deposits data. *******************************
            // Start a new workbook in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
            m_objSheet.Name = "GPS";
 
            // Create an array for the headers and add it to cells A1:L1.
            object[] objHeaders = { "AccountNumber", "Code", "Contract Price", "Date Time", "Extended Price", "ManualPrice", "NumberOfSets", "NumberOfSheets", "PO Number", "Project", "Size", "SqFeet Bond", "SqFeet Mylar", "SqFeet Vellum", "Total Sq ft" };
            m_objRange = m_objSheet.get_Range("A1", "L1");
            m_objRange.Value2 = objHeaders;
            m_objFont = m_objRange.Font;
            m_objFont.Bold = true;
 
            // Get array and add it to the worksheet starting at cell A1.
            m_objRange = m_objSheet.get_Range("A1", m_objOpt);
            m_objRange = m_objRange.get_Resize(20000, 15);
            m_objRange.Value2 = excelOutputArray;
 
            // Format cells to numeric format.  (remaining issue:  array data is string, need to create decimal valued array for numeric data)
            m_objRange = m_objSheet.get_Range("C2", "C20001");
            m_objRange.NumberFormat = "###0.0000";
            m_objRange = m_objSheet.get_Range("E2", "E20001");
            m_objRange.NumberFormat = "###0.0000";
            m_objRange = m_objSheet.get_Range("F2", "F20001");
            m_objRange.NumberFormat = "###0.0000";
            m_objRange = m_objSheet.get_Range("G2", "G20001");
            m_objRange.NumberFormat = "###0";
            m_objRange = m_objSheet.get_Range("H2", "H20001");
            m_objRange.NumberFormat = "###0";
            m_objRange = m_objSheet.get_Range("K2", "K20001");
            m_objRange.NumberFormat = "###0";
            m_objRange = m_objSheet.get_Range("L2", "L20001");
            m_objRange.NumberFormat = "###0.0000";
            m_objRange = m_objSheet.get_Range("M2", "M20001");
            m_objRange.NumberFormat = "###0.0000";
            m_objRange = m_objSheet.get_Range("N2", "N20001");
            m_objRange.NumberFormat = "###0.0000";
            m_objRange = m_objSheet.get_Range("O2", "O20001");
            m_objRange.NumberFormat = "###0.#";
 
            StartWizardBtn.Text = "Saving Data to Disk...";
            Application.DoEvents(); 
 
            // Save the Workbook and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + todaysDate + OrgSelection + ".xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();
 
 
 
            StartWizardBtn.Text = "Start Wizard";
            Application.DoEvents(); 
 
        }

Open in new window

0
dparkes
Asked:
dparkes
1 Solution
 
johnaryanCommented:
It depends on the verdion of the Excel Libraries your using.
The latest i think is Microsoft.Office.Interop.Excel Version 12.

Good Reference:http://msdn.microsoft.com/en-us/library/aa163987.aspx
0
 
dparkesAuthor Commented:
The intended users will all be using a 2007 version of Excel.  Is there alternate code and/or methods that will allow a C# 2008 program to automatically save array data to a programmatically specified older Excel format (ie. Excel '97)?
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now