自製 Excel 記帳 ─ 星期問題 |
答題得分者是:老大仔
|
schang
一般會員 發表:7 回覆:6 積分:2 註冊:2018-09-05 發送簡訊給我 |
大家好,目前還是初學,若有太愚蠢的問題還請見諒,幫忙提點!
小妹我習慣用Excel記帳,由於每年都要更新重弄一份檔案,覺得有點麻煩,也不會寫VBA,所以想說用Delphi做做看。 工作表是以月份區分,例圖如下(皆是用程式碼產生,非手動輸入): 圖一 圖二 我想要在每個工作表的B欄放入「星期」,以「Mon., Tue., Wed., Thu., Fri., Sat., Sun.」格式呈現, 請問我該如何做呢?(要做2019年的) 以下分別是月和日產生方式,自己覺得不太好,若有更好的方式請告訴我! 月: [code delphi] var MonthList: TStringList; i: Integer; begin MonthList := TStringList.Create; try with MonthList do begin Add('Jan'); Add('Feb'); Add('Mar'); Add('Apr'); Add('May'); Add('Jun'); Add('Jul'); Add('Aug'); Add('Sep'); Add('Oct'); Add('Nov'); Add('Dec'); end; for i := 0 to 11 do begin MyExcel.WorkSheets[i 1].Select; //目標工作表 MyExcel.Cells[1, 1].Value := MonthList[i]; MyExcel.WorkSheets['Sheet' IntToStr(i 1)].Name := MonthList[i]; //工作表名稱 end; finally FreeAndNil(MonthList); end; end; [/code] 日: [code delphi] var i, row: Integer; begin for i := 0 to 11 do begin MyExcel.WorkSheets[i 1].Select; if Pos(MyExcel.WorkSheets[i 1].Name, 'JanMarMayJulAugOctDec') > 0 then begin for row := 2 to 32 do MyExcel.Cells[row, 1].Value := row - 1; end else if Pos(MyExcel.WorkSheets[i 1].Name, 'AprJunSepNov') > 0 then begin for row := 2 to 31 do MyExcel.Cells[row, 1].Value := row - 1; end else begin for row := 2 to 29 do MyExcel.Cells[row, 1].Value := row - 1; end; end; end; [/code] 編輯記錄
schang 重新編輯於 2018-09-05 11:55:25, 註解 無‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
Demo,拉一個Button、Edit、Memo,後可執行以下code
細部需求需自行調整 uses DateUtils; procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; sYear, sTmpDate: String; iDays: Integer; sTmp: String; AYear, AMonth, ADay: Word; const arrMonthE: array [1..12] of String = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); arrDays : array [1..7] of String = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'); begin Memo1.Lines.Clear; sYear := Edit1.Text; for i := Low(arrMonthE) to High(arrMonthE) do begin Memo1.Lines.Add(arrMonthE[i]); sTmpDate := sYear '/' IntToStr(i) '/01'; DecodeDate(StrToDate(sTmpDate), AYear, AMonth, ADay); iDays := DaysInAMonth(AYear, AMonth); for j := 1 to iDays do begin sTmpDate := sYear '/' IntToStr(i) '/' IntToStr(j); sTmp := IntToStr(j) ', ' arrDays[DayOfTheWeek(StrToDate(sTmpDate))]; Memo1.Lines.Add(sTmp); end; Memo1.Lines.Add('------------------------------------------------------------------'); end; end; |
schang
一般會員 發表:7 回覆:6 積分:2 註冊:2018-09-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |