Hi,
Our Project using Export functionality from .net 2.0 windows forms application. And it was working great in all OS and in MS Office versions except MS Office 2007 (Windows 7 OS, 64 bit).
When export excel event is fired from our application and after the report opened in MS Excel, that movement onwards none of the application can be editable.
Enclosed Complete source code here...
public partial class ExportExcelIssue : Form
{
public static int Counter=0;
public String strPath = "";
public void CreateExcel()
{
Counter = Counter + 1;
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet.Cells[1, 1] = "TEST";
string strTempPath = System.Environment.GetEnvironmentVariable("TEMP");
DirectoryInfo objInfo = new DirectoryInfo(strTempPath);
strPath = strTempPath + "\\Excel" + Counter + ".xls";
xlWorkBook.SaveAs(strPath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
object Delete;
Delete = xlApp;
if (!WithoutCom.Checked)
{
ReleaseComObject(ref Delete);
}
if (!WithoutGC.Checked)
{
GC.Collect();
}
if ((GCWithWFPF.Checked & WithoutGC.Checked) || (GCWithWFPF.Checked & !WithoutGC.Checked))
{
GC.WaitForPendingFinalizers();
}
try
{
System.Diagnostics.Process.Start(strPath);
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
}
private void ReleaseComObject(ref Object o)
{
int releaseObject = 1;
while (releaseObject > 0)
{
releaseObject = System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
};
}
private void button1_Click(object sender, EventArgs e)
{
CreateExcel();
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if (GCWithWFPF.Checked)
{
WithoutGC.Checked = false;
WithoutGC.Enabled = false;
}
else {
WithoutGC.Enabled = true;
}
}
private void WithoutGC_CheckedChanged(object sender, EventArgs e)
{
if (WithoutGC.Checked)
{
GCWithWFPF.Checked = false;
GCWithWFPF.Enabled = false;
}
else
{
GCWithWFPF.Enabled = true;
}
}
}
Bookmarks