EXCEL表写入时问题解决

来源:互联网 发布:壹方凌网络是干嘛的 编辑:程序博客网 时间:2024/06/03 15:15

   我是个新手,以前很少操作excel表,这次由于工作需要,写个很简单的小程序,但是这个小程序让我碎了心,搞了两天,在运气的加持下,终于搞定了,现分享一下。

   我写的程序很简单,一个excel表(下称A表)中有三列,第一列是号码,从A表中读出号码,通过号码查年龄、姓名,然后写回A表中的二、三列,为了提高效率,中间加了DATATABLE为中转。在这个简单的程序中出现了两个问题 

            问题一:

            调试时,保存查询出来的数据到A表时,总是提示A表是只读文件,要另存副本,但我只想存回A表,在此其中试了Worksheet.SaveAS()或Workbook.save()方法,期间成功保存了一次,但就再也不成功了,总是提示A表是只读文件。后读了网上的文章加入Microsoft.Office.Interop.Excel.Application.Quit()方法还是问题依旧。

            解决:偶然灵光闪现发现了问题原因,是因为未退出造成了A表的占用,由于Microsoft.Office.Interop.Excel.Application.Quit()是调试中途加入的,加入之前的Microsoft.Office.Interop.Excel.Application仍在占用A表,在任务管理器中清除所有EXCEL.EXE 进程,再次调试,成功。

           问题二:

           在解决上个问题后认为大功告成时,发现A表保存的数据结果不对或是没有保存结果,跟踪了发现不是数据库查询问题,回想了一下过程,为了灵活适应环境,想把A表放在程序文件夹里,把绝对路径改为了默认路径,改后为读入和打开连接语句分别是

         string strConn=   @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dc.xls;" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";//读入

       

          Excel.Workbook wk = workbooks.Open("dc.xls", Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//写入操作前打开A表

          解决:后经奋战终于搞清楚了原因, string strConn=   @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dc.xls;" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"这样写的确是读程序所在文件夹下的A表,  但打开A表时这样写 Excel.Workbook wk = workbooks.Open("dc.xls", Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);却打开的是我的文档下的A表(真奇怪),所以只有绝对路径才能满足要求。针对解决方法如下:

                 string path = System.IO.Directory.GetCurrentDirectory();

                 string strConn=   @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+"\\dc.xls;" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";//读入   保险都加了

                 Excel.Workbook wk = workbooks.Open(path+"\\dc.xls", Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

          问题解决。

  

         

             

0 0
原创粉丝点击