问题1:
如何读取和写入excel文件单元格中的时间数据,如 10:30:11,按照小时:分钟:秒的格式。问题2:
我用OLE方式将excel中的数据导入,但是发现关闭程序后会出现一个问题。Excel.exe为什么没有关闭?在任务管理器出现一大堆Excel.exe进程。
不知道是不是什么东西没有释放?
程序大致框架如下:
//初始化部分
if (::CoInitialize(NULL) == E_INVALIDARG)
{
AfxMessageBox("Failed to initialize COM!");
return;
}
if (!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Failed to create excel server!");
::CoUninitialize();
return;
}
app.SetVisible(FALSE); wbsBooks.AttachDispatch(app.GetWorkbooks()); //类WorkBooks 的Add方法实效
wbsBook.AttachDispatch(wbsBooks.Add(COleVariant(strPath)), TRUE);
wsSheets = wbsBook.GetWorksheets(); ……
…… //释放资源
wbsBooks.DetachDispatch();
wbsBook.DetachDispatch();
app.DetachDispatch();
app.Quit();
::CoUninitialize();这部分代码都在对话框的一个 按钮 关联函数内,是不是要把什么放在OnInitDialog()或者InitInstance()里面呢?
COleVariant里面好像没有关于时间的成员变量,我用GetValue()后,显示的是VT_R8类型(double).
dblVal是0.……的一个值。不知道该怎么处理了?
第二个问题:
我打开文件使用CFileDialog来取得文件路径名(如c:\test.xls)(不知道这个是否有影响),然后用AttachDispatch()函数来关联。
当我把我编写的程序关掉后,除了发现进程管理器里有excel.exe进程外,还发现了一个现象。
就是我双击.xls类型文件时,会打开两个文件。两个文件之间的差别就是一个在另一个文件名后
加了数字1。怎么打开两个excel文件?怎么回事?
谁能解释一下?谢谢了。分不够再加。
to goodboyws(深夜不眠者): 你说的还是不行,我把CoInitialize()放在InitInstance()里面,
把::CoUninitialize();放在CWinApp::ExitInstance()里,发现进程管理器里还是有excel.exe
进程。而且反复几次后,excel.exe进程越多。不知道是哪个地方没有释放掉?
wsSheets.ReleaseDispatch(); wbsBook.DetachDispatch();
wbsBook.ReleaseDispatch(); wbsBooks.DetachDispatch();
wbsBooks.ReleaseDispatch();
wbsBooks.Close(); app.DetachDispatch();
app.ReleaseDispatch() ;
app.Quit();
delete app;该怎么办呢?
谁能说一下啊,谢谢了
不清楚怎么用,没试过类型转换成COleTime吗?
把存储时间的单元格改成文本格式,然后处理字符串应该行。
问题2
先调用app.Quit();看看行不行。
app.DetachDispatch();
app.ReleaseDispatch() ;delete app;,顺序
你说的是对的第一个问题怎么解决呢?
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
//////////
book.SetSaved(true);
book.ReleaseDispatch();
books.ReleaseDispatch();
app.Quit();
app.ReleaseDispatch();
http://community.csdn.net/Expert/topic/3817/3817644.xml?temp=.8584864
range = NULL; //虽然不加上,不单步运行没什么事,建议加上好,免得有隐含错误
wsSheet = NULL;
wsSheets.DetachDispatch();
wsSheets.ReleaseDispatch();
newBook.DetachDispatch();
newBook.ReleaseDispatch();
wbsBooks.Close();
wbsBooks.DetachDispatch();
wbsBooks.ReleaseDispatch();
app.Quit();
app.DetachDispatch();
app.ReleaseDispatch();
delete app;
::CoUninitialize();