WORD 高手:Delphi加Word,如何可以得到WORD中的单元格(宽度固定的单元格)中可写字符个数

noflybird 2003-09-29 11:51:43
同上
...全文
378 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
IORILI 2003-09-29
  • 打赏
  • 举报
回复
给你个例子:
procedure TForm1.FillCell(i, j: byte; wTable: Variant; FieldName: String);
begin
wTable.Cell(i,j).Range.Text := table1.FieldByName(FieldName).AsString
end;
你写个逆过程就行了
noflybird 2003-09-29
  • 打赏
  • 举报
回复
肯定与字体大小有关系,另外还与字间距、左右缩进都有关系
things 2003-09-29
  • 打赏
  • 举报
回复
难,字符个数和字体大小还有关系呀!
IORILI 2003-09-29
  • 打赏
  • 举报
回复
word有单元格吗
vavyboyleon 2003-09-29
  • 打赏
  • 举报
回复
你是说能看见的区域吗?如果你的单元格设定为高宽都是固定的,FitText 属性又不是TRUE,那就得算了,比较麻烦
vavyboyleon 2003-09-29
  • 打赏
  • 举报
回复
cell.range就是单元格的内容
vavyboyleon 2003-09-29
  • 打赏
  • 举报
回复
以下是我找来和你这个题有关的一些文档
都是单元格类型的一些属性(CELL类型)

FitText 属性
请参阅 应用于 示例 特性
如果该属性值为 True,则 Microsoft Word 会减小键入单元格中的文字的可视大小,使其适应列宽。Boolean 类型,可读写。

说明
如果将 FitText 设置为 True,则虽然字体尺寸没有改变,但将调整字符的可视宽度,使单元格可容纳所有键入的文字。

示例
本示例实现的功能是:设定所选内容的第一单元格在其宽度内自动调整键入的文字大小。

Selection.Cells(1).FitText = True

PreferredWidth 属性
请参阅 应用于 示例 特性
应用于 Cell、Cells、Column、Columns 和 Table 对象的 PreferredWidth 属性。

返回或设置指定的单元格、列或表格的首选宽度(以磅为单位或表示为窗口宽度的百分比)。Single 类型,可读写。

expression.PreferredWidth

expression 必需。该表达式返回以上一个对象。

WordWrap 属性
请参阅 应用于 示例 特性
应用于 Cell 对象的 WordWrap 属性。

如果该属性值为 True,则 Microsoft Word 使文本自动换行并加长单元格,使单元格的宽度保持相同。Boolean 类型,可读写。

expression.WordWrap

expression 必需。该表达式返回一个 Cell 对象。
noflybird 2003-09-29
  • 打赏
  • 举报
回复
我的意思是在单元格 某一行的有效区域内的字数(换行、单元格增大均属无效)
vavyboyleon 2003-09-29
  • 打赏
  • 举报
回复
宽度固定的单元格,是“不允许单元格适应文字”,因为因为单元格宽度通常都不会与文字长度匹配,既然单元格的宽度是固定的,那么就只有“文字去适应单元格”,也就是说文字要自动的换行,但是宽度固定的单元格并没有说单元格的高度也固定,那么随着文字的换行,单元格的高度也会增加。另外这个应该与单元格中文字所采用的字体字号有关。我以前曾经做过一段时间的VBA开发,好像没有看到有什么“WORD中的单元格(不管单元格宽度是否确定)中可写字符个数”这样一种说法,也许是我才疏学浅吧,还往各位高手指教,小弟愿与楼主共同进步
IORILI 2003-09-29
  • 打赏
  • 举报
回复
那你知道你的word中的文字的设置了吗,你知道你单元格的烈属了吗???
很多的
noflybird 2003-09-29
  • 打赏
  • 举报
回复
宽度固定的单元格 的意思就是 “不允许单元格适应文字“
IORILI 2003-09-29
  • 打赏
  • 举报
回复
不过我觉得你所说的:WORD中的单元格(宽度固定的单元格)中可写字符个数的说法,不对吧,因为就算宽度一定,即使内容很多的话,他也会自动向下拉长的,不信你就试试
:)
IORILI 2003-09-29
  • 打赏
  • 举报
回复
上面的程序中就用到了你所说的:单元格
wTable := MyDoc.Tables.Item(1);
IORILI 2003-09-29
  • 打赏
  • 举报
回复
一个例子
里面含有对 Word 操作的常用方法:定位替换、表格等。
procedure TForm1.Button1Click(Sender: TObject);
var WordApp,MyDoc,wTable: OLEVariant;
FileName: string;
i: integer;
procedure FillRow(wTable: OLEVariant; Row,StartColumn: Byte; ss: array of String);
var j: word;
begin
for j := Low(ss) to High(ss) do begin
wTable.Cell(Row,j+StartColumn).Range.Text := ss[j];
end;
end;


begin
FileName := ExtractFileDir(Application.ExeName) + '\test1.dot';
if not FileExists(FileName) then
raise Exception.Create('找不到模板!');
try
WordApp := CreateOleObject('Word.Application');
MyDoc := CreateOleObject('Word.Document');
except
Raise Exception.Create('无法打开Word,请确认已安装Word。');
end;

WordApp.Visible := true;
MyDoc := WordApp.Documents.Add(FileName,false);

MyDoc.BookMarks.Item('表名1').Select;
WordApp.Selection.Text := 'Animals';
wTable := MyDoc.Tables.Item(1);
table1.First;
for i := 2 to 4 do begin
if not Table1.Eof then begin
FillCell(i,1,wtable,'Name');
FillCell(i,2,wtable,'Size');
FillCell(i,3,wtable,'Area');
Table1.Next
end else Break
end;

wTable := MyDoc.Tables.Item(2);
table1.First;
for i := 1 to 3 do
if not table1.Eof then begin
FillRow(wTable,i,2,[table1.fieldbyName('Name').AsString,
table1.FieldByName('Size').AsString,
table1.FieldByName('Area').AsString]);
table1.Next
end;

MyDoc.Tables.Add(MyDoc.Bookmarks.Item('表格3').Range,2,5)
end;

procedure TForm1.FillCell(i, j: byte; wTable: Variant; FieldName: String);
begin
wTable.Cell(i,j).Range.Text := table1.FieldByName(FieldName).AsString
end;
noflybird 2003-09-29
  • 打赏
  • 举报
回复
to : IORILI(眼镜@_@)
你的意思我不明白。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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