① 绘制Excel
1. 大二下学期的时候,由于算法的运行时间要用Excel画折线图,不想一个一个复制就找怎样直接把时间绘制在Excel表格里面的某些位置的方法。
2. 当时找到的方法是用.csv后缀名的文件进行输入输出流,然后用逗号隔开即可。方便了算法时间记录的工作。
第一个文件 Excel.h
#ifndef EXCEL_H
#define EXCEL_H
class Excel{
private:
double D[90000];
public:
Excel();
bool put(double a,int r,int c);
void display();
void CreateExcel();
};
#endif
#include
#include "Excel.h"
#include
#include
using namespace std;
Excel::Excel(){
memset(D,0,sizeof(D));
}
bool Excel::put(double a,int r,int c){
if(D[r*300+c]==0){
D[r*300+c]=a;
return true;
}
else{
return false;
}
}
void Excel::display(){
int i=-1,j;
for(;++i<300;){
for(j=-1;++j<299;){
cout<
放完以后调用CreateExcel();来创建csv文件。
② 绘制Word文档
最近研究的,需要用到MFC。
====================================================================================
1. 首先打开VC6.0 新建:
====================================================================================
2. 选择最后一个
====================================================================================
3. 打开后找到ReadWord.cpp双击然后编译链接运行一次
====================================================================================
4. 添加MSWORD类
1. CTRL+W打开MFC ClassWizard界面。
2. 在你的C盘或D盘(OFFICE安装路径所在的盘)搜索MSWORD.OLB,找到路径方便些
3. 打开右边的Add Class下拉菜单,选择From a type library...
4, 直接把路径黏贴上去打开。
====================================================================================
5. 在打开的窗口中添加以下类,可以用CTRL键来多选。
_Application
Documents
_Documents
Range
_Font
Table
Cell
Tables
Cells
Borders
Border
Selection
当然你也可以全部添加。只是接下来给的例子只用到这些而已。
====================================================================================
6. 然后把以下代码覆盖ReadWord.cpp
// 4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//#include "console_word.h"
#include "msword.h"
#include
#include
#include
#include
#pragma warning (disable: 4786)
#include
using namespace std;
const int WIDTH = 400;//表格的宽度
const char p[] = "D:\\1234.txt";//代码的位置
const char e[] = "D:\\doc1.doc";//生成的word文档的位置
/**
* 产生一个代码表格
*/
void CreateTable(Range& range , Tables& ts , Table& t, int width, int height, COleVariant& vOpt,vector& v);
/**
* 将int转成string类型
*/
string IntToString(int index);
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
printf(_T("Fatal Error: MFC initialization failed!\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
if (!SUCCEEDED(CoInitialize(NULL)))
{
AfxMessageBox("初始化COM支持库失败!");
return -1;
}
COleVariant vTrue((short)TRUE) , vFalse((short)FALSE) , vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_Application oWordApp;
if(!oWordApp.CreateDispatch("Word.Application",NULL)){
AfxMessageBox("CreateDispatch failed.",MB_OK | MB_SETFOREGROUND);
return nRetCode;
}
//从这里开始正文
//① 从txt文件中读取出代码
ifstream fin(p);//文件输入流
string temp;//string
vector v;//无限长度的集合
/**
* 1. 从txt文件中读取一行
* 2. 将这一行放入集合中
*/
while(getline(fin,temp,'\n'))
{
v.push_back(temp);
}
fin.close();//关闭输入流
//② 开始操作Word文件
Documents oDocs;//读Word文档
_Document oDoc;//写Word文档
oDocs = oWordApp.GetDocuments();//打开Word文档
oDoc = oDocs.Add(vOpt,vOpt,vOpt,vOpt);
Range range = oDoc.GetContent();//Range范围,指定范围是整个Word文档
Tables tables = oDoc.GetTables();//Tables表格(s)
Table table;//Table表格,单个表格
CreateTable(range,tables,table,v.size(),2,vOpt,v);//创建一个 txt文件行数 x 2列 的表格
//将表格的边框设为可见
//Borders borders = table.GetBorders();
//borders.SetEnable(1);
// Cells cells = range.GetCells();
// cells.SetVerticalAlignment(1);
// cells.SetWidth(60);
// Cell cell = table.Cell(2,1);
// cout<<(long)table.GetRows()<& v){
_Font font;//字体类
/**
* 1. 从Tables表格(s)里面创建一个表格赋给Table表格。
* 2. Tables一个表格集合,Table单指其中一个表格。
*/
t = ts.Add(range,width,height,vOpt,vOpt);
Cell cell = t.Cell(1,1);//取该表格中的第一行第一列。Cell表示表格中的一格子。
cell.Merge(t.Cell(1,2));//第一行第一列的格子 和 第一行第二列的格子 合并
cell.SetWidth(WIDTH);//设置第一行的格子长度为 WIDTH
range = cell.GetRange();//将操作范围Range指定在该格子里面。
font = range.GetFont();//获取当前范围Range里面的字体
font.SetSize(12);//设置字体为12
font.SetBold(1);//设置粗体
range.SetFont(font);//将该范围Range的字体设置为font
range.SetText(v[0].c_str());//该范围Range写上文本
int i = 1;
int indexwidth = WIDTH/20 , wordwidth = WIDTH-WIDTH/20;//indexwidth表示第一行的宽度,wordwidth表示第二行的宽度
for(;++i<=width;){//从第二行开始逐行读取
/**
* 1. 读取当前行的第一列
*/
cell = t.Cell(i,1);//获取当前行第一列的格子
cell.SetWidth(indexwidth);//设置该格子宽度为indexwidth
range = cell.GetRange();//将操作范围设在该格子里面
range.SetBold(1);//设置当前格子为粗体
font = range.GetFont();//获取当前格子的字体
font.SetColor(0x00808080);//A、B、G、A 设置该格子字体颜色,0x A: 00 B: 80 G: 80 R: 80
range.SetFont(font);//设置当前格子的字体为font
range.SetText(IntToString(i-1).c_str());//该格子写上文本
/**
* 1. 读取当前行的第二列
*/
cell = t.Cell(i,2);//获取当前行第二列的格子
cell.SetWidth(wordwidth);//设置该格子宽度为wordwidth
range = cell.GetRange();//获取当前格子的范围
range.SetBold(1);//设置粗体
range.SetFitTextWidth(11);//设置字体大小
range.SetText(v[i-1].c_str());//写入文本
}
}
====================================================================================
这样就大致完成了。该例子是把这样子的函数代码:
生成这样的Word文档表格
注意修改代码中的路径char[] p 和 e。
本例子和读取Word文档的例子可以在这里下载:
http://download.csdn.net/detail/u013580497/9150433