注册 登录
编程论坛 VFP论坛

EXECL中,列宽,行高,与像素的比值?

mywisdom88 发布于 2023-02-26 12:24, 691 次点击
列宽
宽度   像素 比值
11.88    100    0.1188
18.13    150    0.120866667
24.38    200    0.1219
30.63    250    0.12252
行高

75    100    0.75
112.5    150    0.75
150    200    0.75
187.5    250    0.75
从上面看到,行高的比值是固定的,怎么列宽的比值不是固定的
我插如果图片后,想保证,宽度或者高度不超过表格,但又想最大化的现实,怎么实现

oExcel=Createobject("Excel.application")
oExcel.Visible=.T.
oExcel.Workbooks.Add
oExcel.Worksheets("sheet1").Activate

oExcel.Columns("A:A").Select
oExcel.Selection.ColumnWidth = 22
oExcel.Rows("1:1").Select
oExcel.Selection.RowHeight = 100
   
oExcel.Range("A1").Select

oExcel.ActiveSheet.Pictures.Insert("F:\工程管理\frm_img\product\a1000000001.jpg").Select

oExcel.Selection.ShapeRange.Left  = 1
oExcel.Selection.ShapeRange.Top = 1

oExcel.Selection.ShapeRange.Height = 98


[此贴子已经被作者于2023-2-26 20:29编辑过]

8 回复
#2
sdta2023-02-26 12:51
看下EXCEL帮助文件中的下列方法、属性
ShapeRange.ScaleHeight 方法
ShapeRange.ScaleWidth 方法
ShapeRange.LockAspectRatio 属性
图片的高度与宽度比例要设置相等,图片才不会变形
#3
mywisdom882023-02-26 13:42
我刚才测试了,可以设置图片的高度,宽度
我的意思是,假设 原始图片是 800 * 600的,4:3的比例,是可以在表格中设置,对应的列宽,行高,但如果图片不是4:3,而是9:6等等得,就无法简单设置了
#4
sdta2023-02-26 14:11
用比例设置比用具体数字设置更方便,没必要纠结宽度、高度与像素的比值问题
要使图片不失真,比例设置是最合适的
#5
csyx2023-02-26 14:56
Excel 的行高和列宽单位完全不搭界,RowHeight单位是磅,比较简单;ColumnWidth就特别了,单位是工作簿默认字体的字符数
所以你的 a1, b1 应该用 Cell(row,col).Height, Cell(row,col).Width 来测量,不能用 RowHeight,ColumnWidth
注意:cell.Height / Width 是只读的, RowHeight / ColumnWidth 可读可写的
#6
csyx2023-02-26 14:59
参见微软的文档:https://learn.
#7
吹水佬2023-02-26 18:12
在“视图”--“页面布局”行列都是用cm表示(有标尺)
#8
csyx2023-02-26 19:54
大概这样
程序代码:
oExcel = NewObject('Excel.Application')
oBook = oExcel.WorkBooks.Add()
oSheet = oBook.Sheets(1)
*-- 假设图片要放在第二行第三列中(行高100,列宽22)
oRng = m.oSheet.Cells(2,3)
oRng.Rows.RowHeight = 100
oRng.Columns.ColumnWidth = 22

oSheet.Shapes.AddPicture(GetPict('','要插入的图片'), .f., .t., oRng.Left, oRng.Top, -1, -1)
With oSheet.Shapes(oSheet.Shapes.Count)
    .LockAspectRatio = .t.
    *-- 根据图片和单元格的纵横比, 自动确定以单元格的宽还是高为准
    If .Width / .Height > oRng.Width / oRng.Height
        .Width = oRng.Width
        .Top = oRng.Top + (oRng.Height - .Height) / 2    && 以宽为准, 则垂直居中
    Else
        .Height = oRng.Height
        .Left = oRng.Left + (oRng.Width - .Width) / 2    && 以高为准, 则水平居中
    EndIf
EndWith

cFile = Putfile('保存为:', 'test')
If !Empty(cFile)
    cFile = Rtrim(cFile, '.')
    oBook.SaveAs(cFile, oExcel.DefaultSaveFormat)
EndIf
oBook.Close(.f.)
oExcel.Quit()



[此贴子已经被作者于2023-2-26 19:55编辑过]

#9
倦猫19732023-02-26 21:20
那个单位叫:堤。
1