问老妖。。。关于dbgrid转word的问题

sue3140 2010-07-13 08:47:02
我的dbgrid转word之后,那个word文档在2000的系统上打开怎么空格都是方框啊。。。
我用网上的那个方法 工具--选项--视图--格式标记 试过,没用啊。。。
忘解答疑惑!· 谢谢
...全文
120 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
sue3140 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 truelove7283159 的回复:]

那你插入数据时候不会判断一下,是否空.
非空时候trim下,两边空格取消掉.找到开头结尾只要有\R\N的都删除掉.
[/Quote]
哥哎。。我都结贴了!
truelove7283159 2010-08-07
  • 打赏
  • 举报
回复
那你插入数据时候不会判断一下,是否空.
非空时候trim下,两边空格取消掉.找到开头结尾只要有\R\N的都删除掉.
sue3140 2010-07-14
  • 打赏
  • 举报
回复
自己搞定,结贴!~
sue3140 2010-07-13
  • 打赏
  • 举报
回复
妖哥 我发你邮箱了
ccrun.com 2010-07-13
  • 打赏
  • 举报
回复
这个看不到图想像不到那个状况.
sue3140 2010-07-13
  • 打赏
  • 举报
回复
怎么说呢,就像二楼的说的 像是个汉字空格,比正常的空格大一号!
回车符是有的
ccrun.com 2010-07-13
  • 打赏
  • 举报
回复
意思是回车符被显示出来了吧?
那你打开Word,在里面随便输入些文字,回车换行,看看有显示回车符吗?
sue3140 2010-07-13
  • 打赏
  • 举报
回复
妖哥,保存到word当中的表格的时候,每个字符串后面,回车前面,都有个空格
ccrun.com 2010-07-13
  • 打赏
  • 举报
回复
我晕. Windows2000? 那你的Word是什么版本?
注意一下默认输入法是中文的CN图标还是英文的EN?
sue3140 2010-07-13
  • 打赏
  • 举报
回复
我刚看花眼了,妖哥,不是word2000 是在windows2000 上
sue3140 2010-07-13
  • 打赏
  • 举报
回复

能看到吗? 不知道怎么发图。。
sue3140 2010-07-13
  • 打赏
  • 举报
回复
行 我去试试看撒。。 稍等
ccrun.com 2010-07-13
  • 打赏
  • 举报
回复
很久没有用过Word2000了. 你能不能抓个图传上来看看.
sue3140 2010-07-13
  • 打赏
  • 举报
回复
是啊。。在ccrun上看到的 转Excel和转word的
ccrun.com 2010-07-13
  • 打赏
  • 举报
回复
你用的是我写的那段代码吗?
sue3140 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dxkh 的回复:]

汉字空格?
[/Quote]
那请问 我改怎么把他去掉呢?怎么会这样
我来看看CB 2010-07-13
  • 打赏
  • 举报
回复
汉字空格?
tonyzjg 2010-07-13
  • 打赏
  • 举报
回复
学习了
sue3140 2010-07-13
  • 打赏
  • 举报
回复
没有人遇到过吗? 就在转Word的时候 , 生成的表格里面没有空格吗?
程序如下:
void __fastcall DBGrid2Word(TDBGrid *dbg, String strDocFile)
{
if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回
return;
Variant vWordApp, vTable, vCell;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(0, "启动 Word 出错, 可能是没有安装 Word.",
"DBGrid2Word", MB_OK | MB_ICONERROR);
vWordApp = Unassigned;
return;
}

dbg->Visible=false; //显示速度慢
// 新建一个文档
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
Variant vSelect = vWordApp.OlePropertyGet("Selection");
// 设置一下字体,大小
vSelect.OlePropertyGet("Font").OlePropertySet("Size", dbg->Font->Size);
vSelect.OlePropertyGet("Font").OlePropertySet("Name", dbg->Font->Name.c_str());
// 要插入表格的行数
int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);
nRowCount = nRowCount < 2? 2: nRowCount;
// 要插入表格的列数
int nColCount(dbg->Columns->Count);
nColCount = nColCount < 1? 1: nColCount;
// 在Word文档中插入与DBGrid行数列数基本相同的一个表格
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables")
.OleProcedure("Add",
vSelect.OlePropertyGet("Range"),
nRowCount, // 行数
nColCount, // 列数
1, // DefaultTableBehavior:=wdWord9TableBehavior
0); // AutoFitBehavior:=wdAutoFitFixed
// 操作这个表格
vTable = vWordApp.OlePropertyGet("ActiveDocument").
OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", 1);
// 设置单元格的宽度
for(int i=0; i<nColCount; i++)
{
int nColWidth = dbg->Columns->Items[i]->Width;
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidthType", 3); // wdPreferredWidthPoints
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidth", nColWidth);
}

// 先将列名写入Word表格
for(int j=0; j<dbg->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", 1, j + 1);
vCell.OlePropertySet("Range", dbg->Columns->Items[j]->FieldName.c_str());
// 列名单元格背景颜色 // wdColorGray125
vCell.OlePropertyGet("Shading")
.OlePropertySet("BackgroundPatternColor", 14737632);
}
// 将DBGrid中的数据写入Word表格
dbg->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{
for(int j=0; j<dbg->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", i + 1, j + 1);
vCell.OlePropertySet("Range",
dbg->DataSource->DataSet->FieldByName(
dbg->Columns->Items[j]->FieldName)->AsString.c_str());
}
dbg->DataSource->DataSet->Next();
}
// 隐藏Word界面
vWordApp.OlePropertySet("Visible", false);
// 保存Word文档并退出
vWordApp.OlePropertyGet("ActiveDocument")
.OleProcedure("SaveAs", strDocFile.c_str());
vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("Close");
Application->ProcessMessages();
vWordApp.OleProcedure("Quit");
Application->ProcessMessages();
vWordApp = Unassigned;
// 工作结束
dbg->Visible=true;
}
sue3140 2010-07-13
  • 打赏
  • 举报
回复
妖哥同志, 我经过一天的研究发现问题是:

用您的程序生成的word,表格的每个格子里有一个空格,貌似字符串是插在空格前的。
因为我只生成一个表格,数据没有插入的时候,生成的word的表格是有空格的!
在xp的机子上那个空格不显示,反正也看不到,但是在2000系统的机子上就显示为方框,而且打印也有。

现在请问妖哥,怎么弄才会dbgrid转word的时候,在生成的word表格里面没有那个空格。

帮帮我吧!~ 多谢
加载更多回复(2)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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