由于DbgridEh 导出 Excel 如果字段长度超过255会截断,所以必须换一种方法来导出,百度  谷歌 看了上百帖,都是有这句:

xlApp := CreateOleObject('Excel.Application');

由于这句代码是要求 客户的电脑上必须有 Office 才行,利用的是OLE技术;

中国的市场是客户电脑上没有Office 但是有WPS,所以带上面那句的代码 都不行,看了很多帖子,发现了一贴很强:

http://blog.sina.com.cn/s/blog_4a8552f80100hee8.html

再客户电脑上没有OFFICE的情况下  除了利用dbgrideh的导出方法,又多了一种导出的方法。代码如下:

另外这里说下dbgrideh 的导出excel,它有两种方式:

1. 客户电脑上有没有Office 都可以,缺陷是  当字段长度 超过255后,会被截断。

SaveDBGridEhToExportFile(TDBGridEhExportAsXLS,TopExportExcelShow,top_file_name,True);

2.要求客户端电脑上必须有Office,实际是 他内部是调用了CreateOleObject('Excel.Application');注意OLE

SaveDBGridEhToExportFile(TDBGridEhExportAsOLEXLS,TopExportExcelShow,top_file_name,True);

新型方法代码如下:

procedure TfrmExportExcel.Excel1Click(Sender: TObject);
var
MyList: TStringList;
MyStr,top_file_name: string;
I: Integer;
MySaveDialog: TSaveDialog;
begin
MyList := TStringList.Create;
MySaveDialog := TSaveDialog.Create(nil);
try
//-----------------------------
//初始化
MySaveDialog.Filter := 'Excel|*.xls';
MyStr:=''; //-----------------------------
//选择文件
if MySaveDialog.Execute then
begin
top_file_name := MySaveDialog.FileName+'.xls';
end else begin
ShowMessage('导出失败');
Exit;
end; //-----------------------------
//导出表
frmClientDm.ExportExcelShowAdq.DisableControls;
for I := 0 to frmClientDm.ExportExcelShowAdq.FieldCount-1 do
begin
MyStr := MyStr+frmClientDm.ExportExcelShowAdq.Fields[I].DisplayLabel + Char(9);
Application.ProcessMessages;
end;
MyStr := MyStr + #13;
frmClientDm.ExportExcelShowAdq.First;
while not(frmClientDm.ExportExcelShowAdq.Eof) do
begin
for I := 0 to frmClientDm.ExportExcelShowAdq.FieldCount-1 do
begin
MyStr := MyStr + frmClientDm.ExportExcelShowAdq.Fields[I].AsString + Char(9);
end;
MyStr := MyStr + #13;
frmClientDm.ExportExcelShowAdq.Next;
Application.ProcessMessages;
end;
//回到原点
frmClientDm.ExportExcelShowAdq.First;
frmClientDm.ExportExcelShowAdq.EnableControls;
MyList.Add(MyStr);
MyList.SaveToFile(top_file_name); //-----------------------------
//提示导出成功
ShowMessage('导出订单表成功');
finally
MyList.Free;
MySaveDialog.Free;
end;
end;

DbgridEh 导出 Excel 如果字段长度超过255会截断,那如何导出,另一种神奇的方法的更多相关文章

  1. EXCEL某列长度超过255个字符导入SQL SERVER的处理方法

    问题描述: [Excel 源 [1]] 错误: 输出“Excel 源输出”(9) 上的 输出列“Description 3”(546) 出错.返回的列状态是:“文本被截断,或者一个或多个字符在目标代码 ...

  2. EXCEL某列长度超过255个字符导入SQL SERVER2005的处理方法

    将注册表中 Jet引擎. HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel 如果是:ACE引擎. HKEY_LOCAL_MACHI ...

  3. C#中用OLEDB操作EXCEL时,单元格内容长度超过255被截断

    C#中Microsoft.ACE.OLEDB.12.0 驱动读取excel,会读取前8行来判定每列的数据类型,假如没有超过255个字符,那么会被设置为nvarchar(255),从第9行开始,超过25 ...

  4. 用OLEDB读取EXCEL时,单元格内容长度超过255被截断

    https://support.microsoft.com/zh-cn/help/189897/data-truncated-to-255-characters-with-excel-odbc-dri ...

  5. c# word操作篇,解决字符串长度超过255就不能替换的问题

    本文使用的是Microsoft.Office.Interop.Word组件,必须在系统安装了office相关组件的条件下进行,在com里面找到Microsoft  Word 16.0 Object L ...

  6. C#导出Excel,某单元格内容长度超过255 的解决方法

    public static void ToExcel(DataTable dtSource, string strPath, string strSheetName) { System.Data.Ol ...

  7. ora 32021 设置参数时参数值长度超过255处理办法

    alter system set db_file_name_convert='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-.' scope=spfi ...

  8. POI导出excel,本地测试没问题,linux测试无法导出

    java.lang.RuntimeException: java.io.IOException: No such file or directory        at org.apache.poi. ...

  9. SSIS ->> Excel Destination无法接受大于255个字符长度的字符字段(转载)

    从下文的链接中找到一些背景,因为Excel会以前8行作为参考,如果某个字段前8行的最长长度没有超过255个字符,就会报错.如果知道某个字段属于描述性字段,而且字段的数据长度很可能超过255个字符长度, ...

  10. SSIS ->> Excel Destination无法接受大于255个字符长度的字符字段

    从下文的链接中找到一些背景,因为Excel会以前8行作为参考,如果某个字段前8行的最长长度没有超过255个字符,就会报错.如果知道某个字段属于描述性字段,而且字段的数据长度很可能超过255个字符长度, ...

随机推荐

  1. 如何利用ChatGPT帮你写代码?

    最近爆火的ChatGpt相信大家都不陌生,听说它还能写代码,而且能力不凡.作为合格的嵌入式软件工程师,必须得充分利用起来! 获取系统IP地址 先写一个脚本,获取系统IP地址吧,没想到还有详细的注释!这 ...

  2. Metastability 亚稳态问题

    亚稳态问题 各种跨时钟域的问题都会归结于亚稳态的问题,IP设计时钟域不超过两个,对于CDC设计要求不高;对于SoC设计来说,CDC处理十分重要 1.什么是亚稳态? transition time 是可 ...

  3. pycharm等编辑器快捷键大赏

    1.序论 平时打代码的时候用鼠标在写代码的时候还行,代码一长就GG,快捷键便是我们的好选择 2.应用场景 1.问题一--选中一段指定区域 我想选中一段区域(我们一般用鼠标拖动),或者某一个标识符(光标 ...

  4. 【TouchGFX】屏幕概念

    Screen构成 界面布局 View, 逻辑处理 Presenter Currently Active Screen 因TouchGFX分配内存的的方式是,按照最大的Screen分配,即最大View+ ...

  5. 如何查看centos对于 TIME_WAIT 状态的 Socket 回收时间

    要查看系统对于 TIME_WAIT 状态的 Socket 回收时间,可以通过以下方式查询 TCP 数据结构中的相关字段值: cat /proc/sys/net/ipv4/tcp_fin_timeout ...

  6. Go-并发安全map

  7. oceanbase部署维护命令学习

    oceanbase部署维护命令学习 背景 之前学习过TIDB数据库, 最近又准备学习一下Oceanbase数据库 发现其实两者还是比较相似的. 比较大的区别在于. TiDB是完全开源的, 并且比较明确 ...

  8. [转帖]LSM树详解

    https://zhuanlan.zhihu.com/p/181498475 LSM树(Log-Structured-Merge-Tree)的名字往往会给初识者一个错误的印象,事实上,LSM树并不像B ...

  9. SQLServer 隔离级别的简单学习

    SQLServer 隔离级别的简单学习 背景 上周北京一个项目出现了卡顿的现象. 周末开发测试加紧制作测试发布了补丁,但是并没有好转. 上周四时跟研发訾总简单沟通过, 怀疑是隔离级别有关系.但是不敢确 ...

  10. [转帖]Linux中最全shell命令&常用注意事项

    在编辑linux脚本中不断的会用到复杂的脚本编辑,写文章记录. Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 目录 推荐书籍: Linux常用命令 Linux 常用命令 在li ...