乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 86|回复: 2

[编程交流] 文本替换和格式化

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:50:16 | 显示全部楼层 |阅读模式
大家好,这里是新来的,Lisp程序。自AutoCAD 2000以来,我已经做了一些,但只是在这里和那里,所以我在这方面非常粗糙。
 
我已经编写了一个小例程来翻译(读交换)语言,它在0层上搜索所有文本和多行文字的图形,并将其放入SS中。然后,我使用了来自Gilles Chanteau的Excel例程和位,将Excel文件读入列表。文本将与该列表进行比较并交换。
 
问题是,我认为是特殊字体(希腊语、俄语等)还是替换方法。如果我复制Excel文本并将其粘贴到文本或多行文字中,它会正确显示。然而,例行程序显示?对于许多字符,设置文本样式/字体似乎没有效果。例如,英语单词“SOFA”被替换为“??”??????但复制/粘贴显示“ΚΑΝΑ∏Ε∑”。
 
或多或少,我正在通过SS将文本字符串与excel中的列表进行比较。它每次交换都很完美,找到了18种语言的匹配项。Excel第1列为英语,第2列为希腊语,依此类推。它将换成希腊语并显示?”它会将其识别为与希腊语列中的一个单元格相匹配,然后转换为另一种语言或返回到英语,这样识别就存在了。我只是不明白为什么它不会显示。我认为文本字符串是原始的,或者存在一些unicode格式问题,因为复制/粘贴可以工作。奇怪的是,复制粘贴后,无法识别交换文本。我的ENTMOD中是否需要包含一些格式转换?
 
  1. (setq ED (entget ENT))
  2. (setq iTXT (cdr (assoc 1 ED)))
  3. (setq curCELL (nth excelCOL (nth excelROW mylist))) ;original language
  4. (setq retCELL (nth newCOL (nth excelROW mylist)))   ;new language
  5. (if (= curCELL iTXT)
  6. (setq ED (subst (cons 1 retCELL) (assoc 1 ED) ED))
  7. (entmod ED)
  8. ); (if (= curCELL iTXT)

 
编辑:我觉得我的列表有问题,如果字体不能在那里显示,它就永远不会到达文本。如何将字符串与Excel单元格的内容一一匹配?
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 20:34:18 | 显示全部楼层
这可能是excel例程的局限性,我必须查看一下。
我的感觉是它正在使用(读取字符)或(读取行)。。。从我看到的情况来看,似乎与unicode字符不兼容。。这是我用中国符号做的一个测试。
 
*编辑:由于引号为斜体,因此不明显,但返回了反斜杠*
 
我还尝试制作了一个unicode文本文件中文符号,并尝试在其中写入“ΚΑΝ∏Ε∑”。使用使用读取行的函数读回包含“ΚΑΝΑ∏Ε∑”的文件,返回:
把现有的文本加进去,结果是:“ŸÞŠ”
 
我不是unicode和符号处理方面的专家,但我不确定是否有解决方法。。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 21:19:19 | 显示全部楼层
我从来没有想过Excel宏,列表中填充了奇怪的字符,这很有意义。我还发现,如果我从Excel复制/粘贴到D或多行文字中,就会有格式字符通过“属性”选项板锁定在内容中。
 
我已附上Excel代码段。。。
 
[code];--------------------------------------------------------------------------------;GetExcel-将Excel电子表格中的值存储到*ExcelData@list中;论点:3;ExcelFile$=路径和文件名;SheetName$=未指定的图纸名称或nil;MaxRange$=要包含的最大单元格ID范围,或为零,从单元格A1获取当前区域;语法示例:;(GetExcel“C:\\Temp\\Temp.xls”“Sheet1”“E19”)=打开C:\\Temp\Temp。活页1上的xls,读取至单元格E19;(GetExcel“C:\\Temp\\Temp.xls“nil”XYZ123”)=打开C:\\Temp\Temp。xls在当前表上,并读取至单元格XYZ123-------------------------------------------------------------------------------(defun GetExcel(ExcelFile$SheetName$MaxRange$/列#ColumnRow@Data@ExcelRange^ ExcelValue ExcelValue ExcelVariant^ MaxColumn#MaxRow#Range$Row#工作表)(if(=(键入ExcelFile$)'STR)(if(not(findfile ExcelFile$))(progn(警报(strcat“Excel file”ExcelFile$“未找到”)(退出));progn);if(progn(警报“未指定Excel文件”)(退出));progn);if(gc)(if(setq*ExcelApp%(vlax get object“Excel.Application”))(progn(警报“关闭所有Excel电子表格以继续!”)(vlax释放对象*ExcelApp%)(gc));progn);if(setq ExcelFile$(findfile ExcelFile$)(setq*ExcelApp%(vlax get或create object“Excel.Application”)(vlax invoke method(vlax get property*ExcelApp%'WorkBooks)'Open ExcelFile$)(if SheetName$(vlax get property*ExcelApp%'Sheets)(if(=(vlax get property Worksheet“Name”)SheetName$)(vlax invoke method Worksheet“Activate”);如果);vlax(用于);if(if MaxRange$(progn(setq ColumnRow@(ColumnRow MaxRange$))(setq MaxColumn#(nth 0 ColumnRow@))(setq maxrrow#(nth 1 ColumnRow@));progn(progn(setq CurRegion(vlax get property(vlax get property*ExcelApp%“ActiveSheet”)“Range”“A1”)“CurrentRegion”);setq(setq MaxRow#(vlax get property(vlax get property CurRegion“Rows”)“Count”)(setq MaxColumn#(vlax get property(vlax get property CurRegion“Columns”)“Count”));progn);if(setq*ExcelData@nil)(setq行#1);从第1行开始,主函数将查找空单元格并将第1行标记为标题(重复MaxRow#(setq Data@nil)(setq列#1)(而(
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 14:00 , Processed in 0.585483 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表