線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:864
推到 Plurk!
推到 Facebook!

自製 Excel 記帳 ─ 星期問題

答題得分者是:老大仔
schang
一般會員


發表:7
回覆:6
積分:2
註冊:2018-09-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-09-05 11:43:41 IP:60.250.xxx.xxx 未訂閱
大家好,目前還是初學,若有太愚蠢的問題還請見諒,幫忙提點!
小妹我習慣用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-09-06 14:32:10 IP:59.125.xxx.xxx 未訂閱
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;

編輯記錄
老大仔 重新編輯於 2018-09-06 15:30:44, 註解 無‧
老大仔 重新編輯於 2018-09-06 15:57:05, 註解 程式碼區塊有問題‧
schang
一般會員


發表:7
回覆:6
積分:2
註冊:2018-09-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2018-09-07 09:47:24 IP:60.250.xxx.xxx 未訂閱
非常謝謝你 :)
你的範例我有run出來
待我修改好後再貼上來~
系統時間:2024-05-09 1:10:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!