如何在自己编写的程序中发送数据到EXCEL中,并制出一个表来?

louifox 2003-03-20 06:28:48
RT。
最好能给出个简单的例子来。
...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
okin 2003-03-21
  • 打赏
  • 举报
回复
看这个例子:
http://support.microsoft.com/default.aspx?scid=kb;en-us;q178781
finix 2003-03-21
  • 打赏
  • 举报
回复
Borders borders = range.GetBorders();
Border border = Borders.GetItem(7)//8,9,10.7:左.8:上....
border.SetLineStyle(1)//1:实线
louifox 2003-03-21
  • 打赏
  • 举报
回复
那么,单元格的边框怎么画?
suntt 2003-03-20
  • 打赏
  • 举报
回复
vb的


把DataGrid的数据快速写入EXCEL
青岛德固萨化学有限公司 杜运庆
第一VB论坛上(http://www.vbgood.com)的朋友经常提出“怎样把DataGrid的数据快速写入EXCEL”这个问题,也看了很多用VB控制EXCEL报表的文章和实例,总的感觉是用EXCEL对象一个格子一个格子的写,速度太慢。看过一些国内外的大型软件,注意到他们对数据的报表处理也是写到EXCEL里面,显然,EXCEL对数据报表的处理确实强大和流行,既然如此,就按照鲁迅先生的主张:“拿来!”。
要解决的第一个问题是速度。很多朋友在使用EXCEL对象的时候只注意到它是个可以控制的对象,而忽略了EXCEL也可以作为一个数据库使用,它的名字就是数据库的名字,工作表就是一张数据库中的表,这样话,库之间数据的迁移使用SQL语句要快多了。
第二个问题是DataGrid作为显示数据的网格控件,任何时候不能当作数据库使用。因此在要把它的数据输出的时候可以考虑找它显示的数据源,把它的查询条件与输出的查询条件相一致就完全可以实现我们的目的。
本事例演示了不同的数据源写入EXCEL,在VB6+WIN98下面调试通过。要使用它必须做到以下3点:
1. 在当前目录里面有一个ACCESS数据库,里面有"毕业学生","在校学生"和"退学学生"三张表,每张表里面有"班级","姓名","性别","家庭住址"和"工作单位"等字段,以及一些数据。
2. 要从"工程"→"引用"里面引用Microsoft Active Data Objects 2.1 Library和Microsoft DAO 3.6 Object Library两个对象库。
3. EXCEL的安装路径是默认安装路径。
在窗体上面放置一个DataGrid和三个CommandButton,把下列代码复制到里面,并按F5运行,就可以实现我们的目的。
代码如下:
'声明API函数
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'定义变量
Dim Cnn1 As New ADODB.Connection
Dim rst1 As New ADODB.Recordset
Dim StrSQL As String
Dim TabName As String
Dim Selection As String
Private Sub Command1_Click()
'设置第一个数据源的查询条件
TabName = "毕业学生"
Selection = "班级,姓名,工作单位"
'获取数据
ReqData
End Sub
Private Sub Command2_Click()
'设置第二个数据源的查询条件
TabName = "在校学生"
Selection = "*"
'获取数据
ReqData
End Sub
Private Sub Command3_Click()
'设置第三个数据源的查询条件
TabName = "退学学生"
Selection = "班级,姓名,性别"
'获取数据
ReqData
End Sub
Private Sub Command4_Click()
'如果EXCEL文件已经打开,需要先关闭它.
Dim lpClassName As String
Dim lpCaption As String
Dim Handle As Long
lpClassName = "XLMAIN"
lpCaption = "Microsoft Excel - MyExcel.xls"
Handle = FindWindow(lpClassName$, lpCaption$)
If Handle <> 0 Then
MsgBox "请先关闭EXCEL文件!", vbOKOnly + vbInformation, "不能对已经打开的文件进行写操作!"
Exit Sub
End If
'检查EXCEL文件是否存在,如果存在则删除
If Dir(App.Path & "\MyExcel.xls") <> "" Then Kill App.Path & "\MyExcel.xls"
'进行数据转换
Dim dbs As Database
'打开数据库
Set dbs = OpenDatabase(App.Path & "\db1.mdb")
'把数据导入EXCEL
dbs.Execute "SELECT " & Selection & " INTO [Excel 8.0;DATABASE=" & App.Path & "\MyExcel.xls].[WorkSheet1] FROM " & TabName
'关闭数据库对象
dbs.Close
'释放数据库对象
Set dbs = Nothing
'调用EXCEL打开产生的EXCEL表格
Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & App.Path & "\MyExcel.xls", vbMaximizedFocus
End Sub

Private Sub ReqData()
'设置查询语句
StrSQL = "SELECT " & Selection & " FROM " & TabName
'如果数据库已打开的则先关闭,防止出错
If Cnn1.ConnectionString <> "" Then Cnn1.Close
'打开数据库
Cnn1.Open "Provider=Microsoft.Jet.OLEDB.3.51; Data Source=" & App.Path & "\db1.mdb;"
'设置记录集的打开方式和锁的机制等
With rst1
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open StrSQL, Cnn1, , , adCmdText
End With
'为DataGrid1设置数据源
Set DataGrid1.DataSource = rst1
DataGrid1.Refresh
'为DataGrid1设置标题,并显示记录数
DataGrid1.Caption = "表[" & TabName & "]共" & rst1.RecordCount & "条记录"
End Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
'为DataGrid1设置标题,并显示记录数,用此事件是防止操作员删除记录后记录数发生变化
DataGrid1.Caption = "表[" & TabName & "]共" & rst1.RecordCount & "条记录"
End Sub
本事例只是演示了ACCESS数据库和DataGrid以及简单的查询,对于其他类型的数据库和网格控件以及复杂的查询都可以参照本例进行修改使用,希望对大家的编程有所启发。
以上示例代码如需要,可写信duyunqing@163.net索取。


kingbird 2003-03-20
  • 打赏
  • 举报
回复
写入excel
CDatabase database;
CString sSql;
CString sDriver;
CString sDsn;
CString sFile = "WriteExcel.xls";

// Retrieve the name of the Excel driver. This is
// necessary because Microsoft tends to use language
// specific names like "Microsoft Excel Driver (*.xls)" versus
// "Microsoft Excel Treiber (*.xls)"
sDriver = "Microsoft Excel Driver (*.xls)";
if( sDriver.IsEmpty() )
{
// Blast! We didn磘 find that driver!
AfxMessageBox("No Excel ODBC driver found");
return;
}

// Create a pseudo DSN including the name of the Driver and the Excel file
// so we don磘 have to have an explicit DSN installed in our ODBC admin
sDsn.Format("ODBC;DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
sDriver, sFile, sFile);

TRY
{
// Open the database using the former created pseudo DSN
database.Open(NULL, FALSE, FALSE, sDsn);
//database.OpenEx(sSql,CDatabase::noOdbcDialog);

sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);

// Insert data
sSql = "INSERT INTO demo (Name,Age) VALUES ('Bruno Brutalinsky',45)";
database.ExecuteSQL(sSql);

sSql = "INSERT INTO demo (Name,Age) VALUES ('Fritz Pappenheimer',30)";
database.ExecuteSQL(sSql);

sSql = "INSERT INTO demo (Name,Age) VALUES ('Hella Wahnsinn',28)";
database.ExecuteSQL(sSql);

// Close the database
database.Close();

}
CATCH(CDBException, e)
{
// A database exception occured. Pop out the details...
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;

aluosheng 2003-03-20
  • 打赏
  • 举报
回复
搜索一下,这样的帖子很多,不再赘述。
liugy 2003-03-20
  • 打赏
  • 举报
回复
excel 控件
http://software.chinese.com/soft/soft_con_grids/excelrpt.html
http://www.downme.com/soft_detail.php?nbr=27821
renren6250 2003-03-20
  • 打赏
  • 举报
回复
转载
#include "excel8.h"
void CCsdn3Dlg::OnOK()
{
try
{
_Application app; // app is an _Application object.
_Workbook book; // More object declarations.
_Worksheet sheet;
Workbooks books;
Worksheets sheets;
Range range; // Used for Microsoft Excel 97 components.
LPDISPATCH lpDisp; // Often reused variable.
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn't CreateDispatch() for Excel");
return;
}
app.SetVisible(TRUE);
lpDisp = app.GetWorkbooks(); // Get an IDispatch pointer.
ASSERT(lpDisp);
books.AttachDispatch(lpDisp); // Attach the IDispatch pointer
// to the books object.
lpDisp = books.Open("C:\\temp\\book1.xls", // Test.xls is a workbook.
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional ); // Return Workbook's IDispatch
// pointer.
book.AttachDispatch( lpDisp );
lpDisp = book.GetSheets();
ASSERT(lpDisp);
sheets.AttachDispatch(lpDisp);
// Get sheet #1 and attach the IDispatch pointer to your sheet
// object.
lpDisp = sheets.GetItem( COleVariant((short)(1)) );
ASSERT(lpDisp);
sheet.AttachDispatch(lpDisp);

lpDisp = sheet.GetRange(COleVariant("B2"), COleVariant("b6"));
range.AttachDispatch(lpDisp);
range.SetNumberFormat(COleVariant("@"));
range.SetItem(COleVariant((long)(1)),COleVariant((long)(1)),COleVariant(LPCTSTR("000666")));


// Release dispatch pointers.
range.ReleaseDispatch();
sheet.ReleaseDispatch();
// This is not really necessary because
// the default second parameter of AttachDispatch releases
// when the current scope is lost.

} // End of processing.

catch(COleException *e)
{
char buf[1024]; // For the Try...Catch error message.
sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);
::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);
}

catch(COleDispatchException *e)
{
char buf[1024]; // For the Try...Catch error message.
sprintf(buf,
"COleDispatchException. SCODE: %08lx, Description: \"%s\".",
(long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));
::MessageBox(NULL, buf, "COleDispatchException",
MB_SETFOREGROUND | MB_OK);
}

catch(...)
{
::MessageBox(NULL, "General Exception caught.", "Catch-All",
MB_SETFOREGROUND | MB_OK);
}
CDialog::OnOK();
}
梦回童年001 2003-03-20
  • 打赏
  • 举报
回复
兰陵笑笑生)
我也不懂啊.
suntt 2003-03-20
  • 打赏
  • 举报
回复
up

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧