☆xlsをcsvで保存
[Delphi7]
今更、載せる必要もないかも知れませんが、エクセルファイルの指定シートをCSV形式で保存するサンプルです。今まで Excel2000 というユニットを使ってきましたが、今回 ExcelXP を使ったので、今までのプログラムがコンパイルできずに少し焦りました。
プログラム中にはありませんが、今まで
ExcelWorksheet1.Range['A1','A1'].Value := 'データ';
としていたものも
ExcelWorksheet1.Range['A1','A1'].Value2 := 'データ';
というような変更が必要でした。
今更、載せる必要もないかも知れませんが、エクセルファイルの指定シートをCSV形式で保存するサンプルです。今まで Excel2000 というユニットを使ってきましたが、今回 ExcelXP を使ったので、今までのプログラムがコンパイルできずに少し焦りました。
プログラム中にはありませんが、今まで
ExcelWorksheet1.Range['A1','A1'].Value := 'データ';
としていたものも
ExcelWorksheet1.Range['A1','A1'].Value2 := 'データ';
というような変更が必要でした。
uses ExcelXP;
{ Excelファイルの指定されたシートをCSVに保存します。 }
procedure TForm1.Button1Click(Sender: TObject);
{ セルの列名を数字からアルファベットに変換します。 }
function GetAlfa(I: Integer): String;
var
J,K: Integer;
S1,S2: String;
begin
Result := '';
J := I div 26;
K := I mod 26;
if (K = 0) then
begin
J := J - 1;
K := K + 26;
end;
if (J = 0) then
S1 := ''
else
S1 := Chr(J+64);
S2 := Chr(K+64);
Result := S1+ S2;
end;
const
FileName = 'エクセルのファイル';
WorkSheetName = 'CSVで保存したいシート名';
CSVFile = 'CSVファイル名';
var
LCID, ColumnCount, RowCount: Integer;
ExcelApplication1: TExcelApplication;
ExcelWorkBook1: TExcelWorkBook;
ExcelWorkSheet1: TExcelWorkSheet;
begin
ExcelApplication1 := TExcelApplication.Create(nil);
ExcelWorkBook1 := TExcelWorkBook.Create(nil);
ExcelWorkSheet1 := TExcelWorkSheet.Create(nil);
try
LCID := GetUserDefaultLCID;
ExcelApplication1.Connect;
ExcelApplication1.Visible[LCID] := False;
ExcelApplication1.DisplayAlerts[LCID] := False;
{ Excelファイルをオープンします。 }
ExcelApplication1.Workbooks.Open(
FileName, //FileName: WideString
EmptyParam, //UpdateLinks: OleVariant
EmptyParam, //ReadOnly: OleVariant
EmptyParam, //Format: OleVariant
EmptyParam, //Password: OleVariant
EmptyParam, //WriteResPassword: OleVariant
EmptyParam, //IgnoreReadOnlyRecommended: OleVariant
EmptyParam, //Orign: OleVariant
EmptyParam, //Delimiter: OleVariant
EmptyParam, //Editable: OleVariant
EmptyParam, //Notify: OleVariant
EmptyParam, //Converter: OleVariant
EmptyParam, //AddToMru: OleVariant
EmptyParam, //Local
EmptyParam, //CorruptLoad
LCID //lcid: Integer;
);
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[WorkSheetName] as _Worksheet);
{ 使用されている列数を取得します。 }
ColumnCount := ExcelWorksheet1.UsedRange[LCID].Columns.Count;
{ 使用されている行数を取得します。 }
RowCount := ExcelWorksheet1.UsedRange[LCID].Rows.Count;
{ オートフィルタを解除します。 }
if ExcelWorksheet1.AutoFilterMode[LCID] then
ExcelWorksheet1.AutoFilterMode[LCID] := False;
{ セルに設定されている書式を消去します。 }
ExcelWorksheet1.Range['A1',GetAlfa(ColumnCount)+IntToStr(RowCount)].ClearFormats;
{ 参考 - 書式を設定する場合 }
//ExcelWorksheet1.Range['H2','H10'].NumberFormatLocal :='yyyy/m/d';
{ CSV形式でファイルを名前を付けて保存させます。 }
ExcelWorkbook1.SaveAs(CSVFile, //Filename
xlCSV, //FileFormat
EmptyParam, //Password
EmptyParam, //WriteResPassword
False, //ReadOnlyRecommended
False, //CreateBackup
xlNoChange, //AccessMode
EmptyParam, //ConflictResolution
EmptyParam, //AddToMru
EmptyParam, //TextCodepage
EmptyParam, //TextVisualLayout
EmptyParam, //Local
LCID); //LCID
ExcelWorkbook1.Disconnect; //要らないかも?
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
finally
ExcelWorkSheet1.Free;
ExcelWorkBook1.Free;
ExcelApplication1.Free;
end;
end;
| 固定リンク
