123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389 |
- $PBExportHeader$n_xls_workbook.sru
- forward
- global type n_xls_workbook from nonvisualobject
- end type
- end forward
- global type n_xls_workbook from nonvisualobject
- event type unsignedlong ue_add_string ( string as_value )
- event type unsignedlong ue_add_unicode ( blob ab_string )
- end type
- global n_xls_workbook n_xls_workbook
- type variables
- PUBLIC STRING is_filename
- PUBLIC LONG il_worksheetindex
- PUBLIC INTEGER ii_activesheet
- PUBLIC INTEGER ii_firstsheet
- PUBLIC UINT ii_biff_version = 1536
- PUBLIC n_xls_worksheet invo_worksheets[]
- PUBLIC n_xls_subroutines invo_sub
- Public n_xls_formats invo_Formats
- PUBLIC n_xls_data invo_data
- PUBLIC n_cst_sst invo_sst
- PRIVATE olestorage istg_doc
- PRIVATE olestorage invo_olestorage
- PUBLIC n_xls_format invo_tmp_format
- PUBLIC n_xls_format invo_url_format
- PRIVATE BOOLEAN ib_fileclosed = True
- PUBLIC BLOB ib_sheetnames[]
- PRIVATE STRING is_sheetname = "Sheet"
- PUBLIC INTEGER ii_selected
- PRIVATE INTEGER ii_palette[4, 56]
- PRIVATE UINT iui_codepage = 1252
- PROTECTED BLOB iblb_data
- PROTECTED ULONG il_datasize
- PROTECTED ULONG il_biffsize
- PROTECTED UINT iui_limit = 8224
- PROTECTED BOOLEAN ib_1904
- PROTECTED BOOLEAN ib_WindowProtect
- end variables
- forward prototypes
- public function integer of_create (string as_filename)
- public function integer of_close ()
- public function integer of_set_custom_color (integer ai_index, integer ai_red, integer ai_green, integer ai_blue)
- public function integer of_set_temp_dir (string as_tempdir)
- public function integer of_set_codepage (unsignedinteger aui_codepage)
- public function integer of_set_palette_xl97 ()
- public function long of_get_xf (ref n_xls_format anvo_format)
- public function long of_reg_format (ref n_xls_format anvo_format)
- public function unsignedinteger of_get_fomratindex (n_xls_format anvo_format)
- public function blob of_add_continue (blob ablb_data)
- public function integer of_append (blob ablb_data)
- public function integer of_append (blob ablb_header, blob ablb_data)
- public function integer of_append (blob ablb_header, blob ablb_data, blob ablb_add_data)
- public function integer of_calc_sheet_offsets ()
- public function integer of_get_externs_size ()
- public function integer of_get_names_size ()
- public function boolean of_is_number (string as_str)
- public function boolean of_is_zero_started_number (string as_str)
- public function integer of_store_1904 ()
- public function integer of_store_all_fonts ()
- public function integer of_store_all_num_formats ()
- public function integer of_store_all_styles ()
- public function integer of_store_all_xfs ()
- public function integer of_store_bof (integer ai_type)
- public function integer of_store_boundsheet (blob ab_sheetname, unsignedlong al_offset)
- public function integer of_store_codepage ()
- public function integer of_store_eof ()
- public function integer of_store_externcount (unsignedinteger ai_cxals)
- public function integer of_store_externs ()
- public function integer of_store_externsheet ()
- public function integer of_store_extsst ()
- public function integer of_store_name_long (unsignedinteger ai_index, unsignedinteger ai_type, unsignedinteger ai_rowmin, unsignedinteger ai_rowmax, unsignedinteger ai_colmin, unsignedinteger ai_colmax)
- public function integer of_store_name_short (unsignedinteger ai_index, unsignedinteger ai_type, unsignedinteger ai_rowmin, unsignedinteger ai_rowmax, unsignedinteger ai_colmin, unsignedinteger ai_colmax)
- public function integer of_store_names ()
- public function integer of_store_num_format (blob ab_format, unsignedinteger ai_index)
- public function integer of_store_ole_file ()
- public function integer of_store_palette ()
- public function integer of_store_sst (unsignedlong al_offset)
- public function integer of_store_style ()
- public function integer of_store_supbook ()
- public function integer of_store_window1 ()
- public function integer of_store_workbook ()
- public function n_xls_worksheet of_add_worksheet (blob ab_worksheetname)
- public function n_xls_worksheet of_add_worksheet (string as_worksheetname)
- public function n_xls_worksheet of_add_worksheet ()
- public function n_xls_worksheet of_addworksheet ()
- public function n_xls_worksheet of_addworksheet (blob ab_worksheetname)
- public function n_xls_worksheet of_addworksheet (string as_worksheetname)
- public function integer of_store_mms ()
- public function integer of_store_interfacehdr ()
- public function integer of_store_interfaceend ()
- public function integer of_store_writeaccess ()
- public function integer of_store_backup ()
- public function integer of_store_dsf ()
- public function integer of_store_tabid ()
- public function integer of_store_bookbool ()
- public function integer of_store_windowprotect ()
- public function integer of_store_password ()
- public function integer of_store_protect ()
- public function integer of_store_system_num_format (unsignedinteger ai_index)
- end prototypes
- event type unsignedlong ue_add_string(string as_value);return invo_sst.of_add_string(as_value)
- end event
- event type unsignedlong ue_add_unicode(blob ab_string);return invo_sst.of_add_string(ab_string)
- end event
- public function integer of_create (string as_filename);integer li_ret = 1
- invo_tmp_format = create n_xls_format
- of_reg_format(invo_tmp_format)
- invo_url_format = create n_xls_format
- invo_url_format.of_set_color("blue")
- invo_url_format.of_set_underline(1)
- of_reg_format(invo_url_format)
- if as_filename = "" or isnull(as_filename) then
- messagebox("提示", "必须指定文件名称!", Information!, OK! )
- li_ret = -1
- end if
- if li_ret = 1 then
- if not ib_fileclosed then
- messagebox("提示", "当前文件还没有被保存!", Information!, OK! )
- li_ret = -1
- end if
- end if
- if li_ret = 1 then
- istg_doc = create olestorage
- li_ret = istg_doc.open(as_filename, stgreadwrite!, stgexclusive!)
- if li_ret < 0 then
- messagebox("提示", "可能其它程序正在打开该文件!~r~n" + "打开文件失败!", Information!, OK! )
-
- istg_doc.Close()
- Destroy(istg_doc)
- li_ret = -1
- else
- ib_fileclosed = false
- li_ret = 1
- end if
- end if
- if li_ret = 1 then
- li_ret = of_set_palette_xl97()
- end if
- return li_ret
- end function
- public function integer of_close ();integer li_ret = 1
- if not ib_fileclosed then
- li_ret = of_store_workbook()
- end if
- return li_ret
- end function
- public function integer of_set_custom_color (integer ai_index, integer ai_red, integer ai_green, integer ai_blue);if ai_index < 8 or ai_index > 64 then
- messagebox("Error", "Color index " + string(ai_index) + " outside range: 8 <= index <= 64")
- return -1
- elseif ai_red < 0 or ai_red > 255 or ai_green < 0 or ai_green > 255 or ai_blue < 0 or ai_blue > 255 then
- messagebox("Error", "Color component outside range: 0 <= color <= 255")
- return -1
- else
- ai_index = ai_index - 7
- ii_palette[1, ai_index] = ai_red
- ii_palette[2, ai_index] = ai_green
- ii_palette[3, ai_index] = ai_blue
- ii_palette[4, ai_index] = 0
- return ai_index + 7
- end if
- end function
- public function integer of_set_temp_dir (string as_tempdir);Return 1
- end function
- public function integer of_set_codepage (unsignedinteger aui_codepage);iui_codepage = aui_codepage
- return 1
- end function
- public function integer of_set_palette_xl97 ();ii_palette[] = { 0, 0, 0, 0, 255, 255, 255, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 255, 0, 128, 0, 0, 0, 0, 128, 0, 0, 0, 0, 128, 0, 128, 128, 0, 0, 128, 0, 128, 0, 0, 128, 128, 0, 192, 192, 192, 0, 128, 128, 128, 0, 153, 153, 255, 0, 153, 51, 102, 0, 255, 255, 204, 0, 204, 255, 255, 0, 102, 0, 102, 0, 255, 128, 128, 0, 0, 102, 204, 0, 204, 204, 255, 0, 0, 0, 128, 0, 255, 0, 255, 0, 255, 255, 0, 0, 0, 255, 255, 0, 128, 0, 128, 0, 128, 0, 0, 0, 0, 128, 128, 0, 0, 0, 255, 0, 0, 204, 255, 0, 204, 255, 255, 0, 204, 255, 204, 0, 255, 255, 153, 0, 153, 204, 255, 0, 255, 153, 204, 0, 204, 153, 255, 0, 255, 204, 153, 0, 51, 102, 255, 0, 51, 204, 204, 0, 153, 204, 0, 0, 255, 204, 0, 0, 255, 153, 0, 0, 255, 102, 0, 0, 102, 102, 153, 0, 150, 150, 150, 0, 0, 51, 102, 0, 51, 153, 102, 0, 0, 51, 0, 0, 51, 51, 0, 0, 153, 51, 0, 0, 153, 51, 102, 0, 51, 51, 153, 0, 51, 51, 51, 0 }
- return 1
- end function
- public function long of_get_xf (ref n_xls_format anvo_format);string ls_key
- long li_ret
- //if anvo_format.ii_xf_index > 0 then
- // return anvo_format.ii_xf_index
- //end if
- ls_key = anvo_format.of_get_format_key()
- li_Ret= invo_Formats.OF_Format_Exist(ls_key)
- IF li_Ret<=0 Then
- li_Ret=15
- END IF
- //if invo_xfs.of_key_exists(ls_key) then
- // li_ret = invo_xfs.of_get_value(ls_key)
- //else
- // li_ret = 15
- //end if
- return li_ret
- end function
- public function long of_reg_format (ref n_xls_format anvo_format);Return invo_Formats.OF_Add(anvo_format)
- end function
- public function unsignedinteger of_get_fomratindex (n_xls_format anvo_format);
- IF IsNull(anvo_format) OR Not IsValid(anvo_format) Then
- Return -1
- END IF
- Return invo_Formats.OF_Format_Exist(anvo_Format.OF_Get_Format_Key())
-
- end function
- public function blob of_add_continue (blob ablb_data);uint lui_record = 60
- blob lblb_header
- blob lblb_temp
- long ll_len
- lblb_temp = blobmid(ablb_data, 1, iui_limit)
- ablb_data = blobmid(ablb_data, iui_limit + 1, len(ablb_data) - iui_limit)
- blobedit(lblb_temp, 3, invo_sub.of_pack("v", iui_limit - 4))
- do While len(ablb_data) > iui_limit
- lblb_header = invo_sub.of_pack("v", lui_record) + invo_sub.of_pack("v", iui_limit)
- lblb_temp = lblb_temp + lblb_header
- lblb_temp = lblb_temp + blobmid(ablb_data, 1, iui_limit)
- ablb_data = blobmid(ablb_data, iui_limit + 1, len(ablb_data) - iui_limit)
- loop
- lblb_header = invo_sub.of_pack("v", lui_record) + invo_sub.of_pack("v", len(ablb_data))
- lblb_temp = lblb_temp + lblb_header
- lblb_temp = lblb_temp + ablb_data
- return lblb_temp
- end function
- public function integer of_append (blob ablb_data);integer li_ret = 1
- if len(ablb_data) > iui_limit then
- ablb_data = of_add_continue(ablb_data)
- end if
- il_datasize += len(ablb_data)
- invo_data.of_append(ablb_data)
- return li_ret
- end function
- public function integer of_append (blob ablb_header, blob ablb_data);return of_append(ablb_header + ablb_data)
- end function
- public function integer of_append (blob ablb_header, blob ablb_data, blob ablb_add_data);return of_append(ablb_header + ablb_data + ablb_add_data)
- end function
- public function integer of_calc_sheet_offsets ();integer li_ret = 1
- integer li_boundsheetheader = 12
- integer li_eof = 4
- ulong ll_offset
- long ll_i
- n_xls_worksheet lnvo_sheet
- ll_offset = il_datasize
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- ll_offset += li_boundsheetheader + len(lnvo_sheet.ib_worksheetname)
- next
- ll_offset += of_get_externs_size()
- ll_offset += of_get_names_size()
- ll_offset += li_eof
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- lnvo_sheet.il_offset = ll_offset
- ll_offset += lnvo_sheet.il_datasize
- next
- il_biffsize = ll_offset
- return li_ret
- end function
- public function integer of_get_externs_size ();integer li_cnt
- li_cnt=upperbound(ib_sheetnames)
- return 8 + 6 + 6 * li_cnt
- end function
- public function integer of_get_names_size ();integer li_ret
- long ll_i
- n_xls_worksheet lnvo_sheet
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- if not isnull(lnvo_sheet.ii_print_rowmin) then
- li_ret = li_ret + 31
- end if
- next
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- if not isnull(lnvo_sheet.ii_title_rowmin) and not isnull(lnvo_sheet.ii_title_colmin) then
- li_ret = li_ret + 46
- elseif not isnull(lnvo_sheet.ii_title_rowmin) then
- li_ret = li_ret + 31
- elseif not isnull(lnvo_sheet.ii_title_colmin) then
- li_ret = li_ret + 31
- end if
- next
- return li_ret
- end function
- public function boolean of_is_number (string as_str);integer li_i
- integer li_cnt
- string ls_ch
- as_str = trim(as_str)
- li_cnt = len(as_str)
- if li_cnt < 1 then
- return false
- end if
- for li_i = 1 to li_cnt
- ls_ch = mid(as_str, li_i, 1)
- choose case ls_ch
- case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
- continue
- case else
- return false
- end choose
- next
- return true
- end function
- public function boolean of_is_zero_started_number (string as_str);integer li_i
- integer li_cnt
- string ls_ch
- as_str = trim(as_str)
- if right(as_str, 1) = "0" then
- li_cnt = len(as_str)
- if li_cnt < 2 then
- return false
- end if
- for li_i = 2 to li_cnt
- ls_ch = mid(as_str, li_i, 1)
- choose case ls_ch
- case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
- continue
- case else
- return false
- end choose
- next
- return true
- else
- return false
- end if
- end function
- public function integer of_store_1904 ();uint li_record = 34
- uint li_length = 2
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- if ib_1904 then
- lblb_data = invo_sub.of_pack("v", 1)
- else
- lblb_data = invo_sub.of_pack("v", 0)
- end if
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_all_fonts ();blob lb_font
- string ls_key
- string ls_font_keys[]
- long ll_keys_cnt
- long ll_format_cnt
- long ll_i
- long ll_j
- long ll_key
- integer li_ret = 1
- lb_font = invo_tmp_format.of_get_font()
- for ll_i = 1 to 5
- of_append(lb_font)
- next
- ll_j=upperbound(invo_formats.iblob_font)
- for ll_i=1 to ll_j
- of_append(invo_formats.iblob_font[ll_i])
- next
- return li_ret
- end function
- public function integer of_store_all_num_formats ();Long li
- Long li_COunt
- blob lb_data
- li_COunt=UpperBound(invo_formats.is_num_format)
- for li = 1 to li_COunt
- lb_data= invo_sub.to_unicode(invo_formats.is_num_format[li])
- of_store_num_format(lb_data, li + 164 -1 )
- next
- return 1
- end function
- public function integer of_store_all_styles ();integer li_ret
- li_ret = of_store_style()
- return li_ret
- end function
- public function integer of_store_all_xfs ();blob lb_xf
- long li,li_count
- lb_xf = invo_tmp_format.of_get_xf("style")
- for li = 1 to 15
- of_append(lb_xf)
- next
- li_count=upperbound( invo_formats.iblob_xfs)
- for li=1 to li_count
- of_append(invo_formats.iblob_xfs[li])
- next
- return 1
- end function
- public function integer of_store_bof (integer ai_type);uint li_record = 2057
- uint li_len = 16
- uint li_build = 6319
- uint li_year = 1997
- ulong ll_history_flag = 16449
- ulong ll_lowest_version = 262
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_len)
- lblb_data = invo_sub.of_pack("v", ii_biff_version) + invo_sub.of_pack("v", ai_type) + invo_sub.of_pack("v", li_build) + invo_sub.of_pack("v", li_year) + invo_sub.of_pack("V", ll_history_flag) + invo_sub.of_pack("V", ll_lowest_version)
- of_append(lblb_header + lblb_data)
- return 1
- end function
- public function integer of_store_boundsheet (blob ab_sheetname, unsignedlong al_offset);integer li_ret = 1
- uint li_record = 133
- uint li_length
- uint li_grbit
- uint li_cch
- blob lb_header
- blob lb_data
- li_cch = len(ab_sheetname) / 2
- li_length = 8 + li_cch * 2
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("V", al_offset) + invo_sub.of_pack("v", li_grbit) + invo_sub.of_pack("C", li_cch) + invo_sub.of_pack("C", 1) + ab_sheetname
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_codepage ();uint li_record = 66
- uint li_length = 2
- blob lblb_header
- blob lblb_data
- integer li_ret
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", 1200)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_eof ();integer li_ret = 1
- uint li_record = 10
- uint li_length
- blob lb_header
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- of_append(lb_header)
- return li_ret
- end function
- public function integer of_store_externcount (unsignedinteger ai_cxals);integer li_ret = 1
- uint li_record = 22
- uint li_length = 2
- blob lb_header
- blob lb_data
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", ai_cxals)
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_externs ();of_store_supbook()
- of_store_externsheet()
- return 1
- end function
- public function integer of_store_externsheet ();integer li_ret = 1
- uint li_record = 23
- uint li_length
- blob lb_header
- blob lb_data
- integer li_i
- integer li_cnt
- li_cnt = upperbound(ib_sheetnames)
- li_length = 2 + 6 * li_cnt
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", li_cnt)
- for li_i = li_cnt - 1 to 0 step -1 //65535
- lb_data = lb_data + invo_sub.of_pack("v", 0) + invo_sub.of_pack("v", li_i) + invo_sub.of_pack("v", li_i)
- next
- of_append(lb_header + lb_data)
- return li_ret
- end function
- public function integer of_store_extsst ();integer li_ret = 1
- blob lblb_data
- lblb_data = invo_sst.of_get_extsst()
- il_datasize += len(lblb_data)
- invo_data.of_append(lblb_data)
- return li_ret
- end function
- public function integer of_store_name_long (unsignedinteger ai_index, unsignedinteger ai_type, unsignedinteger ai_rowmin, unsignedinteger ai_rowmax, unsignedinteger ai_colmin, unsignedinteger ai_colmax);integer li_ret = 1
- uint li_record = 24
- uint li_length = 42
- uint li_grbit = 32
- integer li_chkey
- integer li_cch = 1
- uint li_cce = 26
- uint li_ixals
- uint li_itab
- integer li_cchcustmenu
- integer li_cchdescription
- integer li_cchhelptopic
- integer li_cchstatustext
- integer li_rgch
- integer li_unknown03 = 41
- uint li_unknown04 = 23
- integer li_unknown05 = 59
- blob lb_header
- blob lb_data
- uint li_ext_ref
- li_ixals = ai_index + 1
- li_itab = li_ixals
- li_rgch = ai_type
- li_ext_ref = upperbound(ib_sheetnames) - ai_index - 1
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", li_grbit) + invo_sub.of_pack("C", li_chkey) + invo_sub.of_pack("C", li_cch) + invo_sub.of_pack("v", li_cce) + invo_sub.of_pack("v", ai_index) + invo_sub.of_pack("v", li_itab) + invo_sub.of_pack("C", li_cchcustmenu) + invo_sub.of_pack("C", li_cchdescription) + invo_sub.of_pack("C", li_cchhelptopic) + invo_sub.of_pack("C", li_cchstatustext) + invo_sub.of_pack("C", 0) + invo_sub.of_pack("C", li_rgch) + invo_sub.of_pack("C", li_unknown03) + invo_sub.of_pack("v", li_unknown04) + invo_sub.of_pack("C", li_unknown05) + invo_sub.of_pack("v", li_ext_ref) + invo_sub.of_pack("v", 0) + invo_sub.of_pack("v", 65535) + invo_sub.of_pack("v", ai_colmin) + invo_sub.of_pack("v", ai_colmax) + invo_sub.of_pack("C", li_unknown05) + invo_sub.of_pack("v", li_ext_ref) + invo_sub.of_pack("v", ai_rowmin) + invo_sub.of_pack("v", ai_rowmax) + invo_sub.of_pack("v", 0) + invo_sub.of_pack("v", 255) + invo_sub.of_pack("C", 16)
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_name_short (unsignedinteger ai_index, unsignedinteger ai_type, unsignedinteger ai_rowmin, unsignedinteger ai_rowmax, unsignedinteger ai_colmin, unsignedinteger ai_colmax);integer li_ret = 1
- uint li_record = 24
- uint li_length = 27
- uint li_grbit = 32
- integer li_chkey
- integer li_cch = 1
- uint li_cce = 11
- uint li_ixals
- uint li_itab
- integer li_cchcustmenu
- integer li_cchdescription
- integer li_cchhelptopic
- integer li_cchstatustext
- integer li_rgch
- integer li_unknown03 = 59
- uint li_unknown04
- blob lb_header
- blob lb_data
- li_ixals = ai_index + 1
- li_itab = li_ixals
- li_rgch = ai_type
- li_unknown04 = upperbound(ib_sheetnames) - ai_index - 1
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", li_grbit) + invo_sub.of_pack("C", li_chkey) + invo_sub.of_pack("C", li_cch) + invo_sub.of_pack("v", li_cce) + invo_sub.of_pack("v", ai_index) + invo_sub.of_pack("v", li_itab) + invo_sub.of_pack("C", li_cchcustmenu) + invo_sub.of_pack("C", li_cchdescription) + invo_sub.of_pack("C", li_cchhelptopic) + invo_sub.of_pack("C", li_cchstatustext) + invo_sub.of_pack("C", 0) + invo_sub.of_pack("C", li_rgch) + invo_sub.of_pack("C", li_unknown03) + invo_sub.of_pack("v", li_unknown04) + invo_sub.of_pack("v", ai_rowmin) + invo_sub.of_pack("v", ai_rowmax) + invo_sub.of_pack("v", ai_colmin) + invo_sub.of_pack("v", ai_colmax)
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_names ();integer li_ret = 1
- long ll_i
- n_xls_worksheet lnvo_sheet
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- if not isnull(lnvo_sheet.ii_print_rowmin) then
- of_store_name_short(ll_i - 1, 6, lnvo_sheet.ii_print_rowmin, lnvo_sheet.ii_print_rowmax, lnvo_sheet.ii_print_colmin, lnvo_sheet.ii_print_colmax)
- end if
- next
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- if not isnull(lnvo_sheet.ii_title_rowmin) and not isnull(lnvo_sheet.ii_title_colmin) then
- of_store_name_long(ll_i - 1, 7, lnvo_sheet.ii_title_rowmin, lnvo_sheet.ii_title_rowmax, lnvo_sheet.ii_title_colmin, lnvo_sheet.ii_title_colmax)
- elseif not isnull(lnvo_sheet.ii_title_rowmin) then
- of_store_name_short(ll_i - 1, 7, lnvo_sheet.ii_title_rowmin, lnvo_sheet.ii_title_rowmax, 0, 255)
- elseif not isnull(lnvo_sheet.ii_title_colmin) then
- of_store_name_short(ll_i - 1, 7, 0, 65535, lnvo_sheet.ii_title_colmin, lnvo_sheet.ii_title_colmax)
- end if
- next
- return li_ret
- end function
- public function integer of_store_num_format (blob ab_format, unsignedinteger ai_index);integer li_ret = 1
- uint li_record = 1054
- uint li_length
- uint li_len_format
- blob lb_header
- blob lb_data
- integer li_grbit = 1
- integer li_cch
- li_cch = len(ab_format) / 2
- li_length = 5 + li_cch * 2
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", ai_index) + invo_sub.of_pack("v", li_cch) + invo_sub.of_pack("C", li_grbit) + ab_format
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_ole_file ();integer li_ret = 1
- integer li_i
- olestream lstr_book
- n_xls_worksheet lnvo_sheet
- lstr_book = create olestream
- li_ret = lstr_book.open(istg_doc, "Workbook", stgwrite!)
- if li_ret < 0 then
- li_ret = -1
- else
- li_ret = 1
- end if
- if li_ret = 1 then
- invo_data.of_write(lstr_book)
- end if
- if li_ret = 1 then
- for li_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[li_i]
- lnvo_sheet.of_write_data(lstr_book)
- next
- end if
- if li_ret = 1 then
- lstr_book.close()
- istg_doc.close()
- end if
- return li_ret
- end function
- public function integer of_store_palette ();integer li_ret = 1
- uint li_record = 146
- uint li_length
- uint li_ccv
- uint li_i
- blob lb_header
- blob lb_data
- blob lb_data_item
- li_ccv = 56
- li_length = 2 + 4 * li_ccv
- for li_i = 1 to li_ccv
- lb_data_item = invo_sub.of_pack("C", ii_palette[1, li_i]) + invo_sub.of_pack("C", ii_palette[2, li_i]) + invo_sub.of_pack("C", ii_palette[3, li_i]) + invo_sub.of_pack("C", ii_palette[4, li_i])
- if li_i = 1 then
- lb_data = lb_data_item
- else
- lb_data = lb_data + lb_data_item
- end if
- next
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length) + invo_sub.of_pack("v", li_ccv)
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_sst (unsignedlong al_offset);integer li_ret = 1
- blob lblb_data
- lblb_data = invo_sst.of_get_sst(al_offset)
- il_datasize += len(lblb_data)
- invo_data.of_append(lblb_data)
- return li_ret
- end function
- public function integer of_store_style ();integer li_ret
- uint li_record = 659
- uint li_length = 4
- uint li_ixfe = 32768
- integer li_builtin
- integer li_ilevel = 255
- blob lb_header
- blob lb_data
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", li_ixfe) + invo_sub.of_pack("C", li_builtin) + invo_sub.of_pack("C", li_ilevel)
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_supbook ();uint li_record = 430
- uint li_length = 4
- blob lblb_header
- blob lblb_data
- integer li_ret
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", upperbound(ib_sheetnames)) + invo_sub.of_pack("v", 1025)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_window1 ();integer li_ret = 1
- uint li_record = 61
- uint li_length = 18
- uint li_xwn
- uint li_ywn
- uint li_dxwn = 9660
- uint li_dywn = 5490
- uint li_grbit = 56
- uint li_wtabratio = 600
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", li_xwn) + invo_sub.of_pack("v", li_ywn) + invo_sub.of_pack("v", li_dxwn) + invo_sub.of_pack("v", li_dywn) + invo_sub.of_pack("v", li_grbit) + invo_sub.of_pack("v", ii_activesheet) + invo_sub.of_pack("v", ii_firstsheet) + invo_sub.of_pack("v", ii_selected) + invo_sub.of_pack("v", li_wtabratio)
- of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_workbook ();long ll_i
- n_xls_worksheet lnvo_sheet
- if il_worksheetindex = 0 then
- of_add_worksheet()
- end if
- if ii_activesheet = 0 then
- lnvo_sheet = invo_worksheets[1]
- lnvo_sheet.ib_selected = true
- end if
-
-
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- if lnvo_sheet.ib_selected then
- ii_selected ++
- end if
- lnvo_sheet.of_close()
- next
- of_store_bof(5)
- //新增的函数
- //of_store_InterfaceHdr()
- //of_store_MMS()
- //of_store_interfaceEnd()
- //of_store_WriteAccess()
- //records.add( retval.createCodepage() );
- //records.add( retval.createDSF() );
- //records.add( retval.createTabId() );
- //retval.records.setTabpos( records.size() - 1 );
- //records.add( retval.createFnGroupCount() );
- //records.add( retval.createWindowProtect() );
- //records.add( retval.createProtect() );
- //retval.records.setProtpos( records.size() - 1 );
- //records.add( retval.createPassword() );
- //records.add( retval.createProtectionRev4() );
- //records.add( retval.createPasswordRev4() );
- //records.add( retval.createWindowOne() );
- //records.add( retval.createBackup() );
- //retval.records.setBackuppos( records.size() - 1 );
- //records.add( retval.createHideObj() );
- //records.add( retval.createDateWindow1904() );
- //records.add( retval.createPrecision() );
- //records.add( retval.createRefreshAll() );
- //records.add( retval.createBookBool() );
- //records.add( retval.createFont() );
- //records.add( retval.createFont() );
- //records.add( retval.createFont() );
- //records.add( retval.createFont() );
-
- of_store_codepage()
- ////NEW
- //of_store_dsf()
- //of_store_tabID()
- //of_store_WindowProtect()
- //of_store_password()
- //of_store_protect()
- of_store_window1()
- //of_store_backup() //NEW
- of_store_1904()
- //of_Store_BookBool() //NEW
- of_store_all_fonts()
- //for ll_i=1 to 8
- // of_store_system_num_format(ll_i)
- //Next
- of_store_all_num_formats() //保存自定义格式
- of_store_all_xfs()
- of_store_all_styles()
- of_store_palette()
- of_store_sst(il_datasize)
- of_store_extsst()
- of_calc_sheet_offsets()
- for ll_i = 1 to il_worksheetindex
- lnvo_sheet = invo_worksheets[ll_i]
- of_store_boundsheet(lnvo_sheet.ib_worksheetname, lnvo_sheet.il_offset)
- next
- of_store_externs()
- of_store_names()
- of_store_eof()
- return of_store_ole_file()
- end function
- public function n_xls_worksheet of_add_worksheet (blob ab_worksheetname);integer li_ret = 1
- integer li_i
- integer li_len
- string ls_name
- n_xls_worksheet lnvo_cursheet
- n_xls_worksheet lnvo_worksheet
- ls_name = invo_sub.to_ansi(ab_worksheetname, 0, "_")
- do
- li_len = len(ab_worksheetname) / 2
- if li_len > 31 then
- messagebox("Error", "Length of Worksheet name must be less then 31 symbols", stopsign!)
- li_ret = -1
- exit
- end if
- if match(ls_name, "[:*?/\]") then
- messagebox("Error", "Invalid worksheet name", stopsign!)
- li_ret = -1
- exit
- end if
- if trim(ls_name) = "" then
- ab_worksheetname = invo_sub.to_unicode(is_sheetname + string(il_worksheetindex + 1))
- ls_name = invo_sub.to_ansi(ab_worksheetname, 0, "_")
- end if
- for li_i = 1 to il_worksheetindex
- lnvo_cursheet = invo_worksheets[li_i]
- if lnvo_cursheet.ib_worksheetname = ab_worksheetname then
- messagebox("Error", "Duplicate worksheet name", stopsign!)
- li_ret = -1
- exit
- end if
- next
- if li_ret <> 1 then
- exit
- end if
- lnvo_worksheet = create n_xls_worksheet
- lnvo_worksheet.invo_url_format = invo_url_format
- lnvo_worksheet.invo_workbook = this
- lnvo_worksheet.ib_worksheetname = ab_worksheetname
- lnvo_worksheet.is_worksheetname = ls_name
- il_worksheetindex ++
- lnvo_worksheet.ii_index = il_worksheetindex
- ib_sheetnames[il_worksheetindex] = lnvo_worksheet.ib_worksheetname
- invo_worksheets[il_worksheetindex] = lnvo_worksheet
-
-
- loop Until true
- if li_ret <> 1 then
- if not isnull(lnvo_worksheet) then
- if isvalid(lnvo_worksheet) then
- destroy(lnvo_worksheet)
- setnull(lnvo_worksheet)
- end if
- end if
- end if
- return lnvo_worksheet
- end function
- public function n_xls_worksheet of_add_worksheet (string as_worksheetname);return of_add_worksheet(invo_sub.to_unicode(as_worksheetname))
- end function
- public function n_xls_worksheet of_add_worksheet ();return of_add_worksheet("")
- end function
- public function n_xls_worksheet of_addworksheet ();return of_add_worksheet()
- end function
- public function n_xls_worksheet of_addworksheet (blob ab_worksheetname);return of_add_worksheet(ab_worksheetname)
- end function
- public function n_xls_worksheet of_addworksheet (string as_worksheetname);return of_add_worksheet(as_worksheetname)
- end function
- public function integer of_store_mms ();uint li_record = 193 //0xC1
- uint li_length = 2
- int li_addMenuCount=0
- int li_delMenuCount = 0
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("c", li_addMenuCount) + invo_sub.of_pack("c", li_delMenuCount)
- li_ret = of_append(lblb_header,lblb_data)
- return li_ret
- end function
- public function integer of_store_interfacehdr ();integer li_ret
- uint li_record = 225 //0xE1
- uint li_length = 2
- uint li_codepage = 1252 // 0x4b0
- blob lb_header
- blob lb_data
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", li_codepage)
- of_append(lb_header, lb_data)
- return li_ret
- end function
- public function integer of_store_interfaceend ();uint li_record = 226 // 0x e2
- integer li_ret
- blob lblb_header
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", 0)
- li_ret = of_append(lblb_header)
- return li_ret
- end function
- public function integer of_store_writeaccess ();uint li_record = 92 //0x5c
- uint li_length =112
- String ls_username ='黄国酬'
- integer li_ret
- blob lblb_header
- blob lblb_data
- blob lb_username
- int li ,li_len
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- ls_username = ls_username +Space(109 - Len(ls_username ))
- lb_username= invo_sub.to_unicode(ls_username,1252)
- li_len= len(lb_username)/2
- for li=1 to li_len
- lblb_data+= invo_sub.of_pack('c',asc(char(blobMid(lb_username , ( li -1 ) * 2+1, 2))))
- next
- lblb_data = invo_sub.of_pack('v',3)+invo_sub.of_pack('C',0)+lblb_data
- of_append( lblb_header,lblb_data)
- return li_ret
- end function
- public function integer of_store_backup ();uint li_record = 64 //0x40
- uint li_length = 2
- uint li_backup = 0
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", li_backup)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_dsf ();uint li_record = 353 // 0x161
- uint li_length = 2
- uint li_dsf=0
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", li_dsf)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_tabid ();uint li_record = 317 //0X13d
- uint li_length = 0
- uint li_tabids = 0
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- //lblb_data = invo_sub.of_pack("v", li_tabids)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_bookbool ();uint li_record = 218 //0xDA
- uint li_length = 2
- uint li_save_link_values = 0
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", li_save_link_values)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_windowprotect ();//uint li_record = 25 //0x19
- //uint li_length = 2
- //integer li_ret
- //blob lblb_header
- //blob lblb_data
- //
- //lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- //
- //if ib_WindowProtect then
- // lblb_data = invo_sub.of_pack("v", 1)
- //else
- // lblb_data = invo_sub.of_pack("v", 0)
- //end if
- //
- //li_ret = of_append(lblb_header, lblb_data)
- //return li_ret
- Return 1
- end function
- public function integer of_store_password ();uint li_record = 19 //0x13
- uint li_length = 2
- uint li_password
- integer li_ret
- blob lblb_header
- blob lblb_data
- lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lblb_data = invo_sub.of_pack("v", li_password)
- li_ret = of_append(lblb_header, lblb_data)
- return li_ret
- end function
- public function integer of_store_protect ();//uint li_record = 18 //0x12
- //uint li_length = 2
- //uint li_protect
- //integer li_ret
- //blob lblb_header
- //blob lblb_data
- //
- //lblb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- //lblb_data = invo_sub.of_pack("v", li_protect)
- //li_ret = of_append(lblb_header, lblb_data)
- //
- //return li_ret
- Return 1
- end function
- public function integer of_store_system_num_format (unsignedinteger ai_index);integer li_ret = 1
- uint li_record = 1054
- uint li_length
- uint li_len_format
- blob lb_header
- blob lb_data
- integer li_grbit = 1
- integer li_cch
- String ls_Format
- blob lb_Format
- Choose Case ai_Index
-
- Case 1
- ls_Format= "$#,##0_);\($#,##0\)"
- ai_Index = 5
-
- Case 2
- ls_Format = "$#,##0_);[Red]\($#,##0\)"
- ai_Index=6
-
- Case 3
- ls_Format = "$#,##0.00_);\($#,##0.00\)"
- ai_Index=7
-
- Case 4
- ls_Format = "$#,##0.00_);[Red]\($#,##0.00\)"
- ai_Index=8
-
- Case 5
- ls_Format = "_($* #,##0_);_($* \(#,##0\);_($* -_);_(@_)"
- ai_Index=40 //0x2a
-
- Case 6
- ls_Format = "_(* #,##0_);_(* \(#,##0\);_(* -_);_(@_)"
- ai_Index=41
-
- Case 7
- ls_Format = "_($* #,##0.00_);_($* \(#,##0.00\);_($* -??_);_(@_)"
- ai_Index=58
-
- Case 8
- ls_Format = "_(* #,##0.00_);_(* \(#,##0.00\);_(* -??_);_(@_)"
- ai_Index=31
-
- END CHOOSE
- lb_format = invo_sub.to_unicode(ls_format)
- li_cch = len(ls_format)
- li_length = 5 + li_cch * 2
- lb_header = invo_sub.of_pack("v", li_record) + invo_sub.of_pack("v", li_length)
- lb_data = invo_sub.of_pack("v", ai_index) + invo_sub.of_pack("v", li_cch) + invo_sub.of_pack("C", li_grbit) + lb_Format
- of_append(lb_header, lb_data)
- return li_ret
- end function
- on n_xls_workbook.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on n_xls_workbook.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
- event constructor;invo_sub = create n_xls_subroutines
- //invo_xfs = create n_cst_hash_long
- invo_data = create n_xls_data
- invo_sst = create n_cst_sst
- invo_Formats=create n_xls_formats
- end event
- event destructor;int li
- destroy(invo_sub)
- destroy(invo_sst)
- destroy invo_sub
- destroy invo_Formats
- destroy invo_data
- destroy istg_doc
- destroy invo_olestorage
- destroy invo_tmp_format
- destroy invo_url_format
- For li=1 To UpperBound( invo_worksheets)
- Destroy invo_worksheets[li]
- Next
- end event
|