全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4547
推到 Plurk!
推到 Facebook!

Delphi 轉存excel檔..限定格式為xls

尚未結案
viya
一般會員


發表:16
回覆:19
積分:7
註冊:2008-09-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-02-23 16:01:04 IP:202.3.xxx.xxx 訂閱
各位好:

因電腦上的office版本不一致( 我的電腦 office 2010,使用者電腦仍為office 2003.)
故產生的檔案,使用者開啟時會出現亂碼。 (因為office 2010 預設轉出檔案格式為 xlsx)

上網搜尋一陣子之後,發現另存新檔時,可以使用fileformat:=18來解決。
vexcelworkbook.saveas(檔名,FileFormat:=18);

現在我的問題是
1.看大部份文章多是 vexcelworkbook.saveas(檔名,FileFormat:=43);,但我實際試,
發現18才有辦法轉出excel,43都失敗。是因為office版本不同,造成這個參數亦會變動嗎???
(ex:灌office 2007,轉成xls,格式= 43,如果灌office 2010,轉成xls ,格式=18)

2.有看到文章,使用 vexcelworkbook.saveas(檔名,xlexcel9795),但我無法使用,
是不是需要安裝特殊元件,或做其他宣告???

it1506
初階會員


發表:30
回覆:83
積分:47
註冊:2011-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-02-24 10:02:57 IP:59.120.xxx.xxx 未訂閱
你是說用delphi輸出資料到excel時
不顯示excel 而直接存檔嗎

你要不要考慮用 savedialog

可以只指定一種副檔名

viya
一般會員


發表:16
回覆:19
積分:7
註冊:2008-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-02-24 12:13:03 IP:202.3.xxx.xxx 訂閱
謝謝您 的建議.
不過我的程式是每天排程自動執行,要直接存檔.所以不能使用savedialog .


===================引 用 it1506 文 章===================
你是說用delphi輸出資料到excel時
不顯示excel 而直接存檔嗎

你要不要考慮用 savedialog

可以只指定一種副檔名

it1506
初階會員


發表:30
回覆:83
積分:47
註冊:2011-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-02-29 09:53:14 IP:59.120.xxx.xxx 未訂閱
//Excel篇
mExcel.DisplayAlerts := False; //Disable 提示訊息
mExcel.Visible := True; //顯示 Excel 畫面
mExcel.ActiveWindow.FreezePanes := True; //凍結窗格(上一行一定要先選列或格)
mExcel.ActiveWindow.Zoom := 75; //顯示比率為75%
mExcel.ActiveWindow.Zoom := True; //依據目前選擇範圍自動決定視窗大小
//Workbook篇
mWorkBook := mExcel.WorkBooks[1]; //將指定變數設定第一個活頁簿(數字可以用名稱取代)
mWorkBook.Name :='內容'; //變更WorkBook名稱
mExcel.WorkBooks.Add; //新增一個空白活頁簿
mExcel.WorkBooks.Open(完整路徑); //開啟Excel檔
mExcel.WorkBooks[mFile].Close; //關閉Excel檔
DeleteFile(mPath mFile); //刪除Excel檔
mWorkBook.SaveAs(mPath mFile,-4143); //儲存Excel檔
//Sheet篇
mSheet := mExcel.WorkBooks[1].WorkSheets[1]; //將指定變數設定第一個工作表(數字可以用名稱取代)
mSheet.Name :='內容'; //變更Sheet名稱
mSheet.Copy[After := mWorkBook.Sheets[mWorkBook.Sheets.Count]]; //將mSheet複製到mWorkBook最後
mSheet.Move[After := mWorkBook.Sheets[mWorkBook.Sheets.Count]]; //將mSheet搬移到mWorkBook最後
mWorkbook.Sheets.Add[After:=mWorkbook.Sheets[mSheetCount-1]]; //新增一個空白工作表
mWorkBook.Sheets[1].Delete; //刪除指定Sheet
mWorkBook.Sheets[1].Activate; //將指定Sheet設為使用中
//刪除多餘Sheet
if (mWorkBook.Sheets.Count > 1) then
begin
for i:=2 to mWorkBook.Sheets.Count do
mWorkBook.Sheets[2].Delete;
end;
//選取篇
mSheet.Cells.EntireColumn //所有欄
mSheet.Cells.EntireRow //所有列
mSheet.Cells //所有儲存格
mSheet.Columns[1] //第一欄
mSheet.Rows[1] //第一列
mSheet.Cells[r,c] //第r列第c欄
mSheet.Range[起,迄] //區間選擇(起訖可以是欄、列、格)
//填值篇
mSheet.Cells[1,1].Value:= '內容'; //欄位填值
mSheet.Cells[1,1].Formula:= '公式'; //欄位填入公式
mSheet.Cells[1,1].FormulaR1C1:= '公式'; //欄位填入公式
mSheet.Cells[1,1].HasFormula //儲存格是否有公式
//格式篇
mSheet.Range[起,迄].Merge; //合併儲存格
mSheet.Cells.EntireColumn.AutoFit; //最適欄寬
mSheet.Cells.EntireRow.AutoFit; //最適列高
mSheet.Columns[1].ColumnWidth := 100; //設定欄寬
mSheet.Rows[1].RowHeight := 100; //設定列高
mSheet.Rows[1].HorizontalAlignment := -4108; //水平置中(靠左:-4131;靠右:-4152)
mSheet.Rows[1].VerticalAlignment := -4108; //垂直置中(靠左:-4131;靠右:-4152)
mSheet.Rows[1].WrapText := True; //自動換列
mSheet.Columns[1].Hidden := True; //隱藏
mSheet.Columns[1].NumberFormatLocal := '@'; //設定欄位格式[文字]
mSheet.Columns[1].NumberFormatLocal := '#,##0_ '; //設定欄位格式[數值(整數位 三位一撇)]
mSheet.Columns[1].NumberFormatLocal := '#,##0_ ;[紅色]-#,##0 '; //設定欄位格式[數值(整數位 三位一撇 負數紅字)]
mSheet.Columns[1].NumberFormatLocal := '#,##0_);[紅色](#,##0)'; //設定欄位格式[數值(整數位 三位一撇 負數括號紅字)]
mSheet.Columns[1].NumberFormatLocal := '0.00_ '; //設定欄位格式[數值(小數兩位)]
mSheet.Columns[1].NumberFormatLocal := '0.0_);[紅色](0.0)'; //設定欄位格式[數值(小數一位 負數紅字)]
mSheet.Columns[1].NumberFormatLocal := '0.00%'; //設定欄位格式[百分比(小數兩位)]
mSheet.Cells[1].Interior.ColorIndex := 38; //設定底色為玫瑰色
mSheet.Cells[1].Interior.ColorIndex := 6; //設定底色為黃色
mSheet.Cells[1].Interior.ColorIndex := 36; //設定底色為淺黃色
mSheet.Cells[1].Interior.ColorIndex := 35; //設定底色為淺綠色
mSheet.Cells[1,1].Font.Size := 10; //設定字體大小
mSheet.Cells[1,1].Font.Bold := True; //設定粗體字
......
//框線
mSheet.Cells[1,1].Borders[n].LineStyle := 1;
mSheet.Cells[1,1].Borders[n].Weight := 2;
//n = 5.左上右下斜線 6.左下右上斜線 7.左邊線 8.上邊線 9.下邊線 10.右邊線 11.垂直線 12.水平線
//Borders可使用參數:
// LineStyle = 1 實線;-4115 短虛線;4 長短虛線;5 長短短虛線;-4118 細虛線;-4119 雙實線
// Weight = 由細到粗:1 --> 2 --> -4138 --> 4
// ColorIndex = 顏色
//設定格式化條件
mSheet.Cells[1,1].FormatConditions.Delete; //清除格式化條件
mSheet.Cells[1,1].FormatConditions.Add[Type:='1', Operator:='1', Formula1:='1', Formula2:='2']; //新增格式化條件(最多3個)
//參數說明
// 參數 中文說明 說明
//======== ======== =======================================================================
//Type 來源型態 1.儲存格的值 2.公式
//Operator 規則 1.介於 2.不介於 3.等於 4.不等於 5.大於 6.小於 7.大於或等於 8.小於或等於
//Formula1 條件起
//Formula2 條件迄
mSheet.Cells[1,1].FormatConditions(1).Interior.ColorIndex := 3; //設定條件一為底色紅色
//可設定之格式有:Fonts(字型)、Borders(外框)、Interior(圖樣)
//資料篇
mSheet.Cells.EntireColumn.AutoFilter; //自動篩選
mExcel.Selection.Subtotal(1,-4157,VarArrayOf([4,5,6,7,8]),True,False,True); //做小計
//參數說明
// 參數 中文說明 預設值
//================ ======================== ======
//GroupBy 分組小計欄位 1
//Function 使用函數 -4157 加總
//TotalList 新增小計位置
//Replace 取代目前小計 True
//PageBreaks 每組資料分頁 False
//SummaryBelowData 摘要資料置於小計資料下方 True
//可使用函數:-4157 加總;-4106 平均值;-4112 項目個數;-4113 數字項目數;-4136 最大值;-4139 最小值;
mSheet.Outline.ShowLevels(2); //把小計層級設2顯示
//列印篇
mSheet.PageSetup.PrintTitleRows := '$1:$1'; //列印標題列
mSheet.PageSetup.CenterHeader := '表頭'; //中頁首
mSheet.PageSetup.LeftHeader := '頁次: &P / &N'; //左頁首
mSheet.PageSetup.RightHeader := ''; //右頁首
mSheet.PageSetup.CenterFooter := '& &P / &N'; //中頁尾
mSheet.PageSetup.LeftFooter := '頁次: &P / &N'; //左頁尾
mSheet.PageSetup.RightFooter := ''; //右頁尾
mSheet.PageSetup.PrintArea := '$B$1:$N$300'; //設定列印範圍
mSheet.PageSetup.Orientation := 2; //1.直印 2.橫印
mSheet.PageSetup.Zoom := 65; //列印時小成65%
mSheet.PageSetup.Zoom := True; //使用頁次縮放功能
mSheet.PageSetup.FitToPagesWide := 1; //縮放成一頁寬(需配合Zoom = True)
mSheet.PageSetup.FitToPagesTall := 1; //縮放成一頁高(需配合Zoom = True)
mSheet.PageSetup.PaperSize := 8; //設定紙張大小 8:A3、9:A4
mSheet.PageSetup.TopMargin := 1/0.035; //頂邊距1cm
mSheet.PageSetup.BottomMargin := 1/0.035; //底邊距1cm
mSheet.PageSetup.LeftMargin := 1/0.035; //左邊距2cm
mSheet.PageSetup.RightMargin := 1/0.035; //右邊距2cm
mSheet.PageSetup.HeaderMargin := 1/0.035; //頁首1cm
mSheet.PageSetup.FooterMargin := 1/0.035; //頁尾1cm
mSheet.PageSetup.CenterHorizontally := True; //頁面水平居中
mSheet.PageSetup.CenterVertically := False; //頁面垂直居中
===================引 用 viya 文 章===================
謝謝您 的建議.
不過我的程式是每天排程自動執行,要直接存檔.所以不能使用savedialog .


===================引 用 it1506 文 章===================
你是說用delphi輸出資料到excel時
不顯示excel 而直接存檔嗎

你要不要考慮用 savedialog

可以只指定一種副檔名

系統時間:2017-12-11 10:02:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!