I am trying to open excel 2003 workbook and save it as something else, for example excel 95. I use the following code:
XLSApp:=TExcelApplication.Create(Self);
XLSApp.Workbooks.Open(SomeFileName,NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,defaultlcid);
XLSWB:=TExcelWorkbook.Create(XLSApp);
XLSWB.ConnectTo(XLSApp.Workbooks.Item[1]);
XLSWB.SaveCopyAs(ExtractFilePath(edTable.Text)+'temp.xls');
XLSWB.SaveAs(SomeOtherFileName,xlExcel7,EmptyParam,EmptyParam,False,False,xlNoChange,xlUserResolution,False,EmptyParam,EmptyParam,EmptyParam,DefaultLCID);
Unfortunately this code gives "Ole 800A03EC" on clients computer, while it works on mine. Note that I have Office 2007 installed, and he has Office 2003 SP3.
Any help would be very much appreciated.
I have seen this error once when automating Excel. It happened when the user had a cell in editmode and you tried to automate that instance. Excel doesn't like it when you are editing a cell and some program is fiddling around in the background.
So this is what's happening at your client (I think):
- Your client has Excel open and is editing a cell (select a cell and press F2)
- Your code starts:
- You create a TExcelApplication and accesses the Workbooks property. Since your Excel application is not yet connected it calls TOleServer.Connect (look at the implementation of GetDefaultInterface)
- Since the default connectkind is ckRunningOrNew, TExcelApplication connects to the running instance.
- Because the client is editing a cell you get an error on the Open method.
How you can prevent this: Set ConnectKind of your TExcelApplication to ckNewInstance so you'll always work in a separate Excel instance.
800A03EC also occurs when one (like, me) does a dumb thing like trying to load into an Excel cell that doesn't exist, like:
excel.Cells[rowIndex, ri] = x;
where ri is 0.
NOTE BENE: The col
index starts at 1, not 0.
OLE 800A03EC usually has to do with invalid characters in your Excel file. Are you using the same data as your client? Is there a difference in Regional Settings? Etc. etc. there could be number of errors for this, but most likely (as a quick google told me) it is a regional setting.
In my case ( xlExcel8 format ):
Instead of:
theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel8);
I used:
theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName);
or
theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel7);
Both work well... And yes, I know this is a stupid solution, but it's working!
I'm getting that error when trying to store too much data to the WorkSheet (through Delphi)
来源:https://stackoverflow.com/questions/2355998/ole-800a03ec-error-when-using-texcelworkbook-saveas-method-in-delphi-7