|
This is relatively easy, once you're familiar with the Excel object model. Of course, MS give most information for VB developers, but it isn't too hard.
Firstly, from the application object, get the Workbooks collection. From there, you can access already open workbooks, create new ones in the collection (but not necessarily save them to disk) and open existing files.
The method from the workbooks collection you want is 'Open'. This lets you open an existing file. From there, again, you can get the workbook itself (Workbooks Item) and from there the worksheet, and work with ranges etc. Then you can call the Workbook (the item not the collection) save method to write your changes.
Check out by searching for XLCLIENT in MSDN, and "Excel automation VC++" too. There is information in there, you just have to find it.
The hardest part is that in VB examples you see stuff like
set wb = application.workbooks("test1.xls")
and you have to figure out how to convert that to C++.
There was a useful tool which takes VB code in and spits out C++ stuff specifically for this purpose on the MS site, but I can never find it. It wasn't perfect but helped a lot.
Essentially, for any method that returns an object (like workbooks Item), you will need a corresponding wrapper object to hold the returned object, and then call it's methods, so it gets a bit long-winded.
One other caveat is that for a lot of methods, there will be arguments you don't want to specify, but cannot leave out, so you will need to construct a VARIANT for this purpose.
COleVariant v;
v.vt = VT_ERROR;
v.scode = DISP_E_PARAMNOTFOUND;
You can then pass v for optional args you don't want.
I tend to use #import on the type libraries, which does a similar thing to the MFC generation, but I find simpler to use.
Hope this helps.
Steve S
Developer for hire!
|
|
|
|
|
Search MSDN for
<br />
HOWTO: Use MFC to Automate Excel 97 and Navigate Worksheets<br />
Article ID: Q178782
A snapshot:
_Application app;
_Workbook book;
_Worksheet sheet;
Workbooks books;
Worksheets sheets;
Range range;
char buf[1024];
LPDISPATCH lpDisp;
long count;
int i;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn't CreateDispatch on Excel");
return;
}
app.SetVisible(TRUE);
lpDisp = app.GetWorkbooks();
ASSERT(lpDisp);
books.AttachDispatch( lpDisp );
lpDisp = books.Open("C:\\My Docs\\Test",
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional
);
ASSERT(lpDisp);
~RaGE();
|
|
|
|
|
Hi
I have developed and MFC EXE application. In that I want to hide the rectangle that it shows in taskbar. Normally we use it to maximize and minimize the application.
I found some code here : "http://www.codeproject.com/dialog/hidetaskbar.asp"
But I didn't get what exactly it wants to say and where to put the code exactly....
Can anyone help me or any other ide how to do that ?
Thankx in advance
Mahesh
Amarelia Maehsh
Gujarat
India
|
|
|
|
|
Assuming you have a dialog based MFC app ..do this (I am just repeating what the author says)
Declare
LPITaskbarList pTaskbar; in your yourdialog.h and
call the functions
xxx
pTaskbar->HrInit(this);
xxx
in yourdialog.cpp
It should do the work .
If you have a SDI or MDI MFC app , the same should work in your mainfrm.h and .cpp , provided the author's code compiles with urs
redindian
|
|
|
|
|
Thankx a lot for replying
Yes I have MFC application which is dialogue based application.
I tried in the same way but still not working...can you plz tell me it in detail..where to put all code exactly
Thankx in advance
Mahesh
Amarelia Maehsh
Gujarat
India
|
|
|
|
|
EX:
http://localhost/test.rm download speeds is 600Kb/s
but I want the max speeds is 300Kb/s .Can you help me?
Thank you !
|
|
|
|
|
Hi all!
couple of days ago someone discussed an idea of hiding characters in ascii/test files in a way that actual file size won't change. In windows text file two characters are inserted in file with each line i.e. CR & LF. I thought a person could use one character to put his own char but notepad might show that character as a garbage symbol. So anybody knows or have any idea to achieve this?
Only quality never gets out of fashion
|
|
|
|
|
Hello ,.
I am new to MFC.
I am getting error in date field.
I used control as CMonthCalCtrl -- m_month .
I added below code in MCN_SELCHANGE
CString strDate;
CTime ct;
m_month.GetCurSel(ct);
m_strDate.Format("%02d-%02d-%d",ct.GetDay(),ct.GetMonth(),ct.GetYear());
MessageBox(strDate);
UpdateData(FALSE);
==========
But selected date is coming error. It is displaying advance of '12' to real date.
Suppose if I selected 10-8-2005 .,I t is displying
22-8-2005.
If I selected 24-8-2005 ., It is Displaying (24+12=36 Next month) Taking Next month i.e, 5-8-2005
Praveen Chowdam Kumar
|
|
|
|
|
GUys.. need help here.. here the situation.. in my main i need to change a value in one of my header file.. how do i go abt doing so..
i new to declare a variable right??
where do i do that?
in my dialog.cpp??
the situtaion is i need to constant change an ip address. but that address is fixed in one of my header file.. so how do i go about this..
Much help need.. and waiting for yrs kindess..
|
|
|
|
|
In your dialog.h , change the variable's value (IP address or whatever) and include it in your .cpp ,
job finshed
redindian
|
|
|
|
|
cue_ball wrote:
the situtaion is i need to constant change an ip address. but that address is fixed in one of my header file..
What do you mean by fixed? Perhaps you can try posting some code sample on that.
<font=arial>Weiye Chen
Life is hard, yet we are made of flesh...
|
|
|
|
|
Thanks alot for yr help.. but i still have some misunderstanding.. my program.. a simple server n client program.
For my client program.. the logged in ip. address is set in a uility.cpp (which is one of the header file..)
i was hoping to check it to more versitaile.. so that i can change the ip when the main dialog is running..
but it seem that the moment the program compile it read the uility first hence i can exe it.
is it possible to like by pass it then let call it back..
the ip.. setting is in uility.cpp and my simple edit. box is in dialog.cpp
anyhelp is greatly appraised
|
|
|
|
|
If that ip address is stored as a member variable of some class in utility.cpp, then you can just create a member function to modify it. If it is a global variable, just make sure it is declared with extern in the file that you want to access it. Again, post some code for the ip address part in utility.cpp if possible.
<font=arial>Weiye Chen
Life is hard, yet we are made of flesh...
-- modified at 0:16 Friday 26th August, 2005
|
|
|
|
|
// utility.cpp -- contains stuff used by more than one thread
#include <stdafx.h>
#include "utility.h"
CString g_strServerName;
//The IP address in the following line is to be changed to that of the machine
//in which the Server is installed.
CString g_strServerIP = "192.0.3.109";volatile UINT g_nPort = 1500;
BOOL g_bConnected = FALSE;
BOOL g_bServerClosed = TRUE;
char *g_cRequest;
CBlockingSocket g_sClient;
CEvent g_eventKill;
that line already set is as that ip.. i wanna declare a variable in the main dialog.cpp then throw the value over.. is it possible.. thank alot
|
|
|
|
|
Ok since g_strServerIP is a global and you want to access it in dialog.cpp, then you need to put this line there:
extern CString g_strServerIP; Now in your dialog.cpp you can access it to change the value:
CString sNewIP = "255.255.255.255"
g_strServerIP = sNewIP;
<font=arial>Weiye Chen
Life is hard, yet we are made of flesh...
|
|
|
|
|
thanks.. i try it and compile.. no error..
i add in
#include "stdafx.h"
#include "ChatClient.h"
#include "ChatClientDlg.h"
#include "utility.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
extern CString g_strServerIP;#endif
and at a button..
void CChatClientDlg::Onipcon()
{
CString str;
m_IpCon.GetWindowText(str);
g_strServerIP=str;
}
it should work right!
but problem the moment the program started it retrive the ip from the uility and if there no fix ip.. the program freeze up although it can compile but i cant connect to the server..
|
|
|
|
|
cue_ball wrote:
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
extern CString g_strServerIP;#endif
Don't put it inside the #ifdef tags.
cue_ball wrote:
the moment the program started it retrive the ip from the uility and if there no fix ip.. the program freeze up
Check your connect function. Run a debug and see how or where it freezed.
<font=arial>Weiye Chen
Life is hard, yet we are made of flesh...
|
|
|
|
|
ACTUALLY IT DIDNT FREEZE UP..the whole program still run but.. but when i key in my ip it didnt work..
i tink it because the compiler run though the uility first hence .. it "jam" the program because it cant find any ip address.. cos at the point of start it is a unknow number
|
|
|
|
|
i build a app. its view is drived chtmview, and it can explore internet. but i want chang the content in chtmview, when i open a html page. for example, i want show the datas that are from database in view. how can i do?
|
|
|
|
|
Hello
You can use GetHtmlDocument() method to get IDispatch interface of HTML document object. Then you can query interfaces of your interest: IHTMLDocument2 , IHTMLDocument3 . With these interface you can access entire HTML document. Look at MSDN. All these MSHTML interfaces are documented pretty well.
Andrew
|
|
|
|
|
|
Just wanted to comfirm, is it true that characters like '>' or '<' can't be passed as command line arguments? I have a main function to take in parameters. However, it seems that characters like '>', '<' can't be passed in. e.g.
abc.exe 9000
abc.exe >9000
<font=arial>Weiye Chen
Life is hard, yet we are made of flesh...
|
|
|
|
|
me think that < or > are used as indirection for the command parser ( dos ).
for example,
dir > qq.txt
will put the result of the dir command in the qq.txt file.
if you want to put < or > in a parameter, you could enclose it in "
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
Maximilien wrote:
me think that < or > are used as indirection for the command parser
Yeah, i would think so.
Maximilien wrote:
if you want to put < or > in a parameter, you could enclose it in "
Thanks.
<font=arial>Weiye Chen
Life is hard, yet we are made of flesh...
|
|
|
|
|
Instead of arguments use the command line itself and parse it using your own code.
GetCommandLine provides you with the raw command line.
Elaine
The tigress is here
|
|
|
|