1 package org.jinterop.dcom.test; 2 3 import java.net.UnknownHostException ; 4 5 import org.jinterop.dcom.common.JIException; 6 import org.jinterop.dcom.core.IJIComObject; 7 import org.jinterop.dcom.core.JIComServer; 8 import org.jinterop.dcom.core.JIInterfacePointer; 9 import org.jinterop.dcom.core.JIProgId; 10 import org.jinterop.dcom.core.JISession; 11 import org.jinterop.dcom.core.JIString; 12 import org.jinterop.dcom.core.JIVariant; 13 import org.jinterop.dcom.win32.ComFactory; 14 import org.jinterop.dcom.win32.IJIDispatch; 15 import org.jinterop.dcom.win32.IJITypeInfo; 16 17 public class MSExcel { 18 19 private final int xlWorksheet = -4167; 20 private final int xlXYScatterLinesNoMarkers = 75; 21 private final int xlColumns = 2; 22 23 private JIComServer comServer = null; 24 private IJIDispatch dispatch = null; 25 private IJIComObject unknown = null; 26 private IJIDispatch dispatchOfWorkSheet = null; 27 private IJIDispatch dispatchOfWorkBook = null; 28 private JISession session = null; 29 public MSExcel(String address,String [] args) throws JIException, UnknownHostException 30 { 31 session = JISession.createSession(args[1],args[2],args[3]); 32 comServer = new JIComServer(JIProgId.valueOf(session,"Excel.Application"),address,session); 33 } 34 35 public void startExcel() throws JIException 36 { 37 unknown = comServer.createInstance(); 38 dispatch = (IJIDispatch)ComFactory.createCOMInstance(ComFactory.IID_IDispatch,unknown); 39 IJITypeInfo typeInfo = dispatch.getTypeInfo(0); 40 typeInfo.getFuncDesc(0); 41 } 42 43 public void showExcel() throws JIException 44 { 45 int dispId = dispatch.getIDsOfNames("Visible"); 46 JIVariant variant = new JIVariant(Boolean.TRUE); 47 dispatch.put(dispId,variant); 48 } 49 50 public void createWorkSheet() throws JIException 51 { 52 int dispId = dispatch.getIDsOfNames("Workbooks"); 53 Object [] out = new Object []{JIVariant.class}; 54 JIVariant[] outVal2 = null; 55 JIVariant outVal = dispatch.get(dispId); 56 JIInterfacePointer ptr = (JIInterfacePointer)outVal.getObject(); 57 dispatchOfWorkBook =(IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 58 59 60 int[] dispIds = dispatchOfWorkBook.getIDsOfNames(new String []{"Add","Template"}); 61 62 out = new Object []{JIVariant.class}; 63 dispId = dispatchOfWorkBook.getIDsOfNames("Add"); 64 65 outVal2 = dispatchOfWorkBook.callMethodA(dispId,new Object []{new Integer (xlWorksheet)}); 66 ptr = (JIInterfacePointer)outVal2[0].getObject(); 67 dispatchOfWorkBook =(IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 68 69 dispId = dispatchOfWorkBook.getIDsOfNames("Worksheets"); 70 JIVariant variant = new JIVariant((short)1); 71 out = new Object []{JIVariant.class}; 72 outVal2 = dispatchOfWorkBook.get(dispId,new Object []{variant}); 73 74 ptr = (JIInterfacePointer)outVal2[0].getObject(); 75 dispatchOfWorkSheet =(IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 76 77 } 78 79 public void pasteStringToWorkSheet() throws JIException 80 { 81 int dispId = dispatchOfWorkSheet.getIDsOfNames("Range"); 82 83 JIVariant variant = new JIVariant(new JIString("A1")); 84 Object [] out = new Object []{JIVariant.class}; 85 JIVariant outVal,outVal2[] = null; 86 outVal2 = dispatchOfWorkSheet.get(dispId, new Object []{variant}); 87 88 JIInterfacePointer ptr = (JIInterfacePointer)outVal2[0].getObject(); 89 IJIDispatch dispRange = (IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 90 91 dispId = dispRange.getIDsOfNames("Select"); 92 out = new Object []{JIVariant.class}; 93 outVal = dispRange.get(dispId) ; 94 95 dispId = dispatchOfWorkBook.getIDsOfNames("ActiveSheet"); 96 out = new Object []{JIVariant.class}; 97 outVal = dispatchOfWorkBook.get(dispId); 98 99 ptr = (JIInterfacePointer)outVal.getObject(); 100 IJIDispatch dispatchActiveSheet = (IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 101 dispId = dispatchActiveSheet.getIDsOfNames("Paste"); 102 out = new Object []{JIVariant.class}; 103 try{ 104 outVal = dispatchActiveSheet.callMethodA(dispId); 105 }catch(JIException e) 106 { 107 throw e; 108 } 109 } 110 111 public void createXYChart() throws JIException 112 { 113 int dispId = dispatchOfWorkSheet.getIDsOfNames("Columns"); 115 116 Double cols = new Double (2); 117 Object [] out = new Object []{JIVariant.class}; 118 JIVariant outVal ,outVal2[] = null; 119 outVal2 = dispatchOfWorkSheet.get(dispId,new Object []{cols}); 120 121 JIInterfacePointer ptr = (JIInterfacePointer)outVal2[0].getObject(); 122 IJIDispatch dispatchRange = (IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 123 124 dispId = dispatchOfWorkBook.getIDsOfNames("Charts"); 125 out = new Object []{JIVariant.class}; 126 outVal = dispatchOfWorkBook.get(dispId); 127 128 ptr = (JIInterfacePointer)outVal.getObject(); 129 IJIDispatch dispatchChart = (IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 130 131 132 133 dispId = dispatchChart.getIDsOfNames("Add"); 134 out = new Object []{JIVariant.class}; 135 outVal = dispatchChart.callMethodA(dispId); 136 137 ptr = (JIInterfacePointer)outVal.getObject(); 138 dispatchChart = (IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 139 140 dispId = dispatchOfWorkBook.getIDsOfNames("ActiveChart"); 141 out = new Object []{JIVariant.class}; 142 143 outVal = dispatchOfWorkBook.get(dispId); 144 145 ptr = (JIInterfacePointer)outVal.getObject(); 146 IJIDispatch dispatchActiveChart = (IJIDispatch)ComFactory.createCOMInstance(unknown,ptr); 147 148 dispId = dispatchActiveChart.getIDsOfNames("ChartType"); 149 out = new Object []{JIVariant.class}; 150 151 dispatchActiveChart.put(dispId,new JIVariant(new Short ((short)xlXYScatterLinesNoMarkers))); 152 153 int[] dispIds = dispatchActiveChart.getIDsOfNames(new String []{"SetSourceData","Source","PlotBy"}); 154 155 dispId = dispatchActiveChart.getIDsOfNames("SetSourceData"); 156 out = new Object []{JIVariant.class}; 157 outVal2 = dispatchActiveChart.callMethodA(dispId,new Object []{dispatchRange,new Short ((short)xlColumns)},new int[]{dispIds[1],dispIds[2]}); 159 JISession.destroySession(session); 160 } 161 162 public static void main(String [] args) { 163 164 try { 165 if (args.length < 4) 166 { 167 System.out.println("Please provide address domain username password"); 168 return; 169 } 170 MSExcel test = new MSExcel(args[0],args); 171 test.startExcel(); 172 test.showExcel(); 173 test.createWorkSheet(); 174 test.pasteStringToWorkSheet(); 175 test.createXYChart(); 176 } catch (Exception e) { 177 e.printStackTrace(); 179 } 180 } 181 182 183 184 185 186 } 187 | Popular Tags |