ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据另存为CSV档案(也是一种excel档案)【2】------自主选择路径

2021-05-08 10:01:56  阅读:111  来源: 互联网

标签:档案 end 另存为 excel mysave LIST1 FileName Filter Path


实现自主选择路径,将数据另存为CSV档案的功能。代码如下:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShlObj,ComCtrls,ShellAPI,IniFiles,
  ActiveX, wwdbdatetimepicker;

type
  TForm1 = class(TForm)
    Button1: TButton;
    wwDBDateTimePicker1: TwwDBDateTimePicker;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetSystemPath(Folder: Integer): string;
var
  PIDL: PItemIDList;//PItemIDList在ShlObj單元。
  Path: LPSTR;//LPSTR在Windows單元。
  AMalloc: IMalloc;//IMalloc在ActiveX單元。
begin
  Path :=StrAlloc(MAX_PATH);
  SHGetSpecialFolderLocation(Application.Handle, Folder, PIDL);
  if SHGetPathFromIDList(PIDL, Path) then
    Result :=Path;
  SHGetMalloc(AMalloc);
  AMalloc.Free(PIDL);
  StrDispose(Path);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  mysave:TSaveDialog;
  FileName,MYSTR:string;
  LIST1:TStringList;
  I:Integer;
begin
  FileName:='我的文檔啦';
  mysave:=TSaveDialog.Create(Self);//self這裡是指form1
  mysave.InitialDir:=GetSystemPath(CSIDL_PERSONAL);//CSIDL_PERSONAL在ShlObj單元里,是一個16進制的數:$0005。
  mysave.InitialDir:=GetCurrentDir; //直接用delphi自帶的函數GetCurrentDir(在SysUtils單元里)也能取得文件路徑。
  mysave.Title:='請選擇要保存的位置啦';
  mysave.FileName:=FileName;
  {如何在保存時于文檔名后面加上後綴名‘.csv’?
  答:是mysave.DefaultExt、 mysave.Filter、 mysave.FilterIndex 共同決定的。下面的代碼分別解釋了它們所起的作用:}

  mysave.DefaultExt:='CSV';//選‘存檔類型’時這句代碼使文檔名後面有後綴且隨著所選的類型而變化相應的後綴。
  mysave.Filter:='xlsx檔案|*.xlsx|xls檔案|*.xls|csv檔案|*.csv|所有檔案|*.*';//這裡羅列了4種類型。(Filter屬性有Filter Name和Filter兩個值,相當於展示值和存儲值。)
  mysave.FilterIndex:=3;//存檔類型(過濾) 的下標,從1開始,1表示第一條,默認為第一條。這裡為3表示後綴名默認為‘.csv’。

  mysave.Options:=mysave.Options+[ofOverwritePrompt];//相同文件名时弹出是否覆盖的对话框
  //FileName:=mysave.GetNamePath;//FileName是空的,這樣不能獲取路徑。。。
  if mysave.Execute then
  begin
    FileName:=mysave.FileName;//獲取文件保存的路徑!!
    mysave.Free;
  end
  else
    mysave.Free;
  LIST1:=TStringList.Create;
  MYSTR:='HAHA,TOTO,DUDU,LINGLING,PYNPYN,KIMO,GIGI,QIQI';
  LIST1.Append(MYSTR);
  for I:=0 TO 10 do
  BEGIN
    LIST1.Append('MY'+FormatFloat('00',I));
  end;

  LIST1.SaveToFile(FileName);{根據文件路徑找到剛剛創建并保存的文件,將列表LIST1的每行內容
  按行保存到該文件中(CSV文件會把行中按逗號分隔的內容分割并保存到不同的列單元格!而
  xlsx、xls文件不會識別逗號分割,只會全部保存到一個單元格里)。  }

  //下面調用API函數ShellExecute打開程式文檔
  //ShellExecute(Handle,'',PChar(FileName),'','',SW_SHOWNORMAL);//用空字符串的話,後面自主打開excel時會報錯!!
  ShellExecute(Handle,nil,PChar(FileName),nil,nil,SW_SHOWNORMAL);//是PChar類型,所以要用nil。
  //ShellExecute(Handle,null,PChar(FileName),null,null,SW_SHOWNORMAL);//報錯:Incompatible types: 'Variant' and 'PAnsiChar'
end;

 

结果如图:

 

 

标签:档案,end,另存为,excel,mysave,LIST1,FileName,Filter,Path
来源: https://www.cnblogs.com/168-h/p/14743686.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有