C/C++教程

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

本文主要是介绍数据另存为CSV档案(也是一种excel档案)【2】------自主选择路径,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

实现自主选择路径,将数据另存为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;

 

结果如图:

 

 

这篇关于数据另存为CSV档案(也是一种excel档案)【2】------自主选择路径的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!