Показать полную графическую версию : [решено] Получение массива ячеек для объединения
Delirium
15-07-2009, 09:54
Чего то голова не варит уже...
Имеем экземпляр MS Excel.
Открыли его, все работает(C#, WinForm).
После некоторых операций получаю на выходе некий набор записей, который необходимо выгрузить в Excel.
Так вот там есть строки, которые необходимо вставить отдельно на строку и выполнить слияние ячеек по горизонтали. Проблема в том, что количество столбцов для слияния известно, но я не нашел, как это количество подсунуть в функцию get_range объекта Excel._WorkSheet.
Можно сделать так:
//Делаем жирным заголовок
oSheet.get_Range("C2", "C2").Rows.EntireRow.Font.Bold= true;
В данном случае выделяется вся строка "С", и делается жирным текст.
А если мне необходимо выделить 5 ячеек, то я могу написать так:
oSheet.get_Range("A1", "F1").Merge(false);
Т.е. если я заранее знаю, что последним нужным столбцом будет F, то могу прописать прямо в коде. А мне необходимо сделать так, чтобы имя столбца формировалось как то автоматом и туда могло подставиться и AB и KG.
Есть какие нибудь идеи, как можно обмануть get_range в C# ?
пример из хелпа:
Range("A1:H8").Formula = "=rand()" 'Range is on the active sheet
...
If you use a text argument for the range address, you must specify the address in A1-style notation (you cannot use R1C1-style notation).
нужно 2 раза перевести десятичную строку в 26-чную
соответсвенно:
string str;
for(int a=my_str_number; 0<a; a/=26, str=string('A' + (a%26))+str) {}
ohSheet.get_Range("A1:F1").Merge(false);
Delirium
16-07-2009, 08:03
Я выкрутился немного другим способом, но зато теперь могу не указывать буквы, а просто номера ячеек (строка, столбец):
oSheet.get_Range(oSheet.Cells[RowIndex, ColumnIndex], oSheet.Cells[RowIndex2, ColumnIndex2]).Merge(false);
Спасибо за помощь :)
нужно 2 раза перевести десятичную строку в 26-чную
соответсвенно:
Код:
string str;
for(int a=my_str_number; 0<a; a/=26, str=string('A' + (a%26))+str) {}
ohSheet.get_Range("A1:F1").Merge(false); »
Неправильно.
Ты предполагаешь, что нумерация столбцов в экселе является числовой по основанию 26 с цифрами
ABC....Z. Это не так. В любой системе счисления есть цифра 0, ведущие нули игнорируются. А в excel столбцы A, AA, AAA - совершенно разные столбцы... Получается, что система счисления по основанию 27, но нули в ней не используются.
Изящного алгоритма для перевода номера столбца в буквенное представление я придумать не смог...
sub rc2a1($){
my $j = shift;
return chr($j+64) if ($j<27);
return chr (int (($j-1)/26)+64).chr(($j-1) % 26 + 65) if ($j<703);
return chr (int (($j-703)/676)+65).rc2a1(($j-703) % 676+27);
}
sergvg, Согласен конечно что не совсем 26-чная, но и не 27 ;) вот код, ИМХО изящней (потому что цикл):
string rc2a1(int my_str_number)
{
// если "A" = 1, то надо:
// --my_str_number;
string str;
int a=my_str_number;
for(; 26<a; a/=26, str=string('A' + (a%26))+str) {}
return string('A' - 1 + a)+str;
}
pva, Ты тестируешь свой код ? Первая колонка - число, вторая - результат моей ф-и, третья - твоей...
1 A A
2 B B
3 C C
4 D D
5 E E
6 F F
7 G G
8 H H
9 I I
10 J J
11 K K
12 L L
13 M M
14 N N
15 O O
16 P P
17 Q Q
18 R R
19 S S
20 T T
21 U U
22 V V
23 W W
24 X X
25 Y Y
26 Z Z
27 AA AB
28 AB AB
29 AC AB
30 AD AB
31 AE AB
32 AF AB
33 AG AB
34 AH AB
35 AI AB
36 AJ AB
37 AK AB
38 AL AB
39 AM AB
40 AN AB
41 AO AB
42 AP AB
43 AQ AB
44 AR AB
45 AS AB
46 AT AB
47 AU AB
48 AV AB
49 AW AB
50 AX AB
51 AY AB
52 AZ BC
53 BA BC
54 BB BC
55 BC BC
56 BD BC
57 BE BC
58 BF BC
59 BG BC
60 BH BC
61 BI BC
62 BJ BC
63 BK BC
64 BL BC
65 BM BC
66 BN BC
67 BO BC
68 BP BC
69 BQ BC
70 BR BC
71 BS BC
72 BT BC
73 BU BC
74 BV BC
75 BW BC
76 BX BC
77 BY BC
78 BZ CD
79 CA CD
80 CB CD
81 CC CD
82 CD CD
83 CE CD
84 CF CD
85 CG CD
86 CH CD
87 CI CD
88 CJ CD
89 CK CD
90 CL CD
91 CM CD
92 CN CD
93 CO CD
94 CP CD
95 CQ CD
96 CR CD
97 CS CD
98 CT CD
99 CU CD
100 CV CD
101 CW CD
102 CX CD
103 CY CD
104 CZ DE
105 DA DE
106 DB DE
107 DC DE
108 DD DE
109 DE DE
110 DF DE
111 DG DE
112 DH DE
113 DI DE
114 DJ DE
115 DK DE
116 DL DE
117 DM DE
118 DN DE
119 DO DE
120 DP DE
121 DQ DE
122 DR DE
123 DS DE
124 DT DE
125 DU DE
126 DV DE
127 DW DE
128 DX DE
129 DY DE
130 DZ EF
131 EA EF
132 EB EF
133 EC EF
134 ED EF
135 EE EF
136 EF EF
137 EG EF
138 EH EF
139 EI EF
140 EJ EF
141 EK EF
142 EL EF
143 EM EF
144 EN EF
145 EO EF
146 EP EF
147 EQ EF
148 ER EF
149 ES EF
150 ET EF
151 EU EF
152 EV EF
153 EW EF
154 EX EF
155 EY EF
156 EZ FG
157 FA FG
158 FB FG
159 FC FG
160 FD FG
161 FE FG
162 FF FG
163 FG FG
164 FH FG
165 FI FG
166 FJ FG
167 FK FG
168 FL FG
169 FM FG
170 FN FG
171 FO FG
172 FP FG
173 FQ FG
174 FR FG
175 FS FG
176 FT FG
177 FU FG
178 FV FG
179 FW FG
180 FX FG
181 FY FG
182 FZ GH
183 GA GH
184 GB GH
185 GC GH
186 GD GH
187 GE GH
188 GF GH
189 GG GH
190 GH GH
191 GI GH
192 GJ GH
193 GK GH
194 GL GH
195 GM GH
196 GN GH
197 GO GH
198 GP GH
199 GQ GH
200 GR GH
201 GS GH
202 GT GH
203 GU GH
204 GV GH
205 GW GH
206 GX GH
207 GY GH
208 GZ HI
209 HA HI
210 HB HI
211 HC HI
212 HD HI
213 HE HI
214 HF HI
215 HG HI
216 HH HI
217 HI HI
218 HJ HI
219 HK HI
220 HL HI
221 HM HI
222 HN HI
223 HO HI
224 HP HI
225 HQ HI
226 HR HI
227 HS HI
228 HT HI
229 HU HI
230 HV HI
231 HW HI
232 HX HI
233 HY HI
234 HZ IJ
235 IA IJ
236 IB IJ
237 IC IJ
238 ID IJ
239 IE IJ
240 IF IJ
241 IG IJ
242 IH IJ
243 II IJ
244 IJ IJ
245 IK IJ
246 IL IJ
247 IM IJ
248 IN IJ
249 IO IJ
250 IP IJ
251 IQ IJ
252 IR IJ
253 IS IJ
254 IT IJ
255 IU IJ
256 IV IJ
257 IW IJ
258 IX IJ
259 IY IJ
260 IZ JK
261 JA JK
262 JB JK
263 JC JK
264 JD JK
265 JE JK
266 JF JK
267 JG JK
268 JH JK
269 JI JK
270 JJ JK
271 JK JK
272 JL JK
273 JM JK
274 JN JK
275 JO JK
276 JP JK
277 JQ JK
278 JR JK
279 JS JK
280 JT JK
281 JU JK
282 JV JK
283 JW JK
284 JX JK
285 JY JK
286 JZ KL
287 KA KL
288 KB KL
289 KC KL
290 KD KL
291 KE KL
292 KF KL
293 KG KL
294 KH KL
295 KI KL
296 KJ KL
297 KK KL
298 KL KL
299 KM KL
300 KN KL
301 KO KL
302 KP KL
303 KQ KL
304 KR KL
305 KS KL
306 KT KL
307 KU KL
308 KV KL
309 KW KL
310 KX KL
311 KY KL
312 KZ LM
313 LA LM
314 LB LM
315 LC LM
316 LD LM
317 LE LM
318 LF LM
319 LG LM
320 LH LM
321 LI LM
322 LJ LM
323 LK LM
324 LL LM
325 LM LM
326 LN LM
327 LO LM
328 LP LM
329 LQ LM
330 LR LM
331 LS LM
332 LT LM
333 LU LM
334 LV LM
335 LW LM
336 LX LM
337 LY LM
338 LZ MN
339 MA MN
340 MB MN
341 MC MN
342 MD MN
343 ME MN
344 MF MN
345 MG MN
346 MH MN
347 MI MN
348 MJ MN
349 MK MN
350 ML MN
351 MM MN
352 MN MN
353 MO MN
354 MP MN
355 MQ MN
356 MR MN
357 MS MN
358 MT MN
359 MU MN
360 MV MN
361 MW MN
362 MX MN
363 MY MN
364 MZ NO
365 NA NO
366 NB NO
367 NC NO
368 ND NO
369 NE NO
370 NF NO
371 NG NO
372 NH NO
373 NI NO
374 NJ NO
375 NK NO
376 NL NO
377 NM NO
378 NN NO
379 NO NO
380 NP NO
381 NQ NO
382 NR NO
383 NS NO
384 NT NO
385 NU NO
386 NV NO
387 NW NO
388 NX NO
389 NY NO
390 NZ OP
391 OA OP
392 OB OP
393 OC OP
394 OD OP
395 OE OP
396 OF OP
397 OG OP
398 OH OP
399 OI OP
400 OJ OP
401 OK OP
402 OL OP
403 OM OP
404 ON OP
405 OO OP
406 OP OP
407 OQ OP
408 OR OP
409 OS OP
410 OT OP
411 OU OP
412 OV OP
413 OW OP
414 OX OP
415 OY OP
416 OZ PQ
417 PA PQ
418 PB PQ
419 PC PQ
420 PD PQ
421 PE PQ
422 PF PQ
423 PG PQ
424 PH PQ
425 PI PQ
426 PJ PQ
427 PK PQ
428 PL PQ
429 PM PQ
430 PN PQ
431 PO PQ
432 PP PQ
433 PQ PQ
434 PR PQ
435 PS PQ
436 PT PQ
437 PU PQ
438 PV PQ
439 PW PQ
440 PX PQ
441 PY PQ
442 PZ QR
443 QA QR
444 QB QR
445 QC QR
446 QD QR
447 QE QR
448 QF QR
449 QG QR
450 QH QR
451 QI QR
452 QJ QR
453 QK QR
454 QL QR
455 QM QR
456 QN QR
457 QO QR
458 QP QR
459 QQ QR
460 QR QR
461 QS QR
462 QT QR
463 QU QR
464 QV QR
465 QW QR
466 QX QR
467 QY QR
468 QZ RS
469 RA RS
470 RB RS
471 RC RS
472 RD RS
473 RE RS
474 RF RS
475 RG RS
476 RH RS
477 RI RS
478 RJ RS
479 RK RS
480 RL RS
481 RM RS
482 RN RS
483 RO RS
484 RP RS
485 RQ RS
486 RR RS
487 RS RS
488 RT RS
489 RU RS
490 RV RS
491 RW RS
492 RX RS
493 RY RS
494 RZ ST
495 SA ST
496 SB ST
497 SC ST
498 SD ST
499 SE ST
500 SF ST
501 SG ST
502 SH ST
503 SI ST
504 SJ ST
505 SK ST
506 SL ST
507 SM ST
508 SN ST
509 SO ST
510 SP ST
511 SQ ST
512 SR ST
513 SS ST
514 ST ST
515 SU ST
516 SV ST
517 SW ST
518 SX ST
519 SY ST
520 SZ TU
521 TA TU
522 TB TU
523 TC TU
524 TD TU
525 TE TU
526 TF TU
527 TG TU
528 TH TU
529 TI TU
530 TJ TU
531 TK TU
532 TL TU
533 TM TU
534 TN TU
535 TO TU
536 TP TU
537 TQ TU
538 TR TU
539 TS TU
540 TT TU
541 TU TU
542 TV TU
543 TW TU
544 TX TU
545 TY TU
546 TZ UV
547 UA UV
548 UB UV
549 UC UV
550 UD UV
551 UE UV
552 UF UV
553 UG UV
554 UH UV
555 UI UV
556 UJ UV
557 UK UV
558 UL UV
559 UM UV
560 UN UV
561 UO UV
562 UP UV
563 UQ UV
564 UR UV
565 US UV
566 UT UV
567 UU UV
568 UV UV
569 UW UV
570 UX UV
571 UY UV
572 UZ VW
573 VA VW
574 VB VW
575 VC VW
576 VD VW
577 VE VW
578 VF VW
579 VG VW
580 VH VW
581 VI VW
582 VJ VW
583 VK VW
584 VL VW
585 VM VW
586 VN VW
587 VO VW
588 VP VW
589 VQ VW
590 VR VW
591 VS VW
592 VT VW
593 VU VW
594 VV VW
595 VW VW
596 VX VW
597 VY VW
598 VZ WX
599 WA WX
600 WB WX
601 WC WX
602 WD WX
603 WE WX
604 WF WX
605 WG WX
606 WH WX
607 WI WX
608 WJ WX
609 WK WX
610 WL WX
611 WM WX
612 WN WX
613 WO WX
614 WP WX
615 WQ WX
616 WR WX
617 WS WX
618 WT WX
619 WU WX
620 WV WX
621 WW WX
622 WX WX
623 WY WX
624 WZ XY
625 XA XY
626 XB XY
627 XC XY
628 XD XY
629 XE XY
630 XF XY
631 XG XY
632 XH XY
633 XI XY
634 XJ XY
635 XK XY
636 XL XY
637 XM XY
638 XN XY
639 XO XY
640 XP XY
641 XQ XY
642 XR XY
643 XS XY
644 XT XY
645 XU XY
646 XV XY
647 XW XY
648 XX XY
649 XY XY
650 XZ YZ
651 YA YZ
652 YB YZ
653 YC YZ
654 YD YZ
655 YE YZ
656 YF YZ
657 YG YZ
658 YH YZ
659 YI YZ
660 YJ YZ
661 YK YZ
662 YL YZ
663 YM YZ
664 YN YZ
665 YO YZ
666 YP YZ
667 YQ YZ
668 YR YZ
669 YS YZ
670 YT YZ
671 YU YZ
672 YV YZ
673 YW YZ
674 YX YZ
675 YY YZ
676 YZ ZA
677 ZA ZA
678 ZB ZA
679 ZC ZA
680 ZD ZA
681 ZE ZA
682 ZF ZA
683 ZG ZA
684 ZH ZA
685 ZI ZA
686 ZJ ZA
687 ZK ZA
688 ZL ZA
689 ZM ZA
690 ZN ZA
691 ZO ZA
692 ZP ZA
693 ZQ ZA
694 ZR ZA
695 ZS ZA
696 ZT ZA
697 ZU ZA
698 ZV ZA
699 ZW ZA
700 ZX ZA
701 ZY ZA
702 ZZ ABB
703 AAA ABB
704 AAB ABB
705 AAC ABB
706 AAD ABB
707 AAE ABB
708 AAF ABB
709 AAG ABB
710 AAH ABB
711 AAI ABB
712 AAJ ABB
713 AAK ABB
714 AAL ABB
715 AAM ABB
716 AAN ABB
717 AAO ABB
718 AAP ABB
719 AAQ ABB
720 AAR ABB
721 AAS ABB
722 AAT ABB
723 AAU ABB
724 AAV ABB
725 AAW ABB
726 AAX ABB
727 AAY ABB
728 AAZ ABC
729 ABA ABC
730 ABB ABC
731 ABC ABC
732 ABD ABC
733 ABE ABC
734 ABF ABC
735 ABG ABC
736 ABH ABC
737 ABI ABC
738 ABJ ABC
739 ABK ABC
740 ABL ABC
741 ABM ABC
742 ABN ABC
743 ABO ABC
744 ABP ABC
745 ABQ ABC
746 ABR ABC
747 ABS ABC
748 ABT ABC
749 ABU ABC
750 ABV ABC
751 ABW ABC
752 ABX ABC
753 ABY ABC
754 ABZ ABD
755 ACA ABD
756 ACB ABD
757 ACC ABD
758 ACD ABD
759 ACE ABD
760 ACF ABD
761 ACG ABD
762 ACH ABD
763 ACI ABD
764 ACJ ABD
765 ACK ABD
766 ACL ABD
767 ACM ABD
768 ACN ABD
769 ACO ABD
770 ACP ABD
771 ACQ ABD
772 ACR ABD
773 ACS ABD
774 ACT ABD
775 ACU ABD
776 ACV ABD
777 ACW ABD
778 ACX ABD
779 ACY ABD
780 ACZ ABE
781 ADA ABE
782 ADB ABE
783 ADC ABE
784 ADD ABE
785 ADE ABE
786 ADF ABE
787 ADG ABE
788 ADH ABE
789 ADI ABE
790 ADJ ABE
791 ADK ABE
792 ADL ABE
793 ADM ABE
794 ADN ABE
795 ADO ABE
796 ADP ABE
797 ADQ ABE
798 ADR ABE
799 ADS ABE
800 ADT ABE
801 ADU ABE
802 ADV ABE
803 ADW ABE
804 ADX ABE
805 ADY ABE
806 ADZ ABF
807 AEA ABF
808 AEB ABF
809 AEC ABF
810 AED ABF
811 AEE ABF
812 AEF ABF
813 AEG ABF
814 AEH ABF
815 AEI ABF
816 AEJ ABF
817 AEK ABF
818 AEL ABF
819 AEM ABF
820 AEN ABF
821 AEO ABF
822 AEP ABF
823 AEQ ABF
824 AER ABF
825 AES ABF
826 AET ABF
827 AEU ABF
828 AEV ABF
829 AEW ABF
830 AEX ABF
831 AEY ABF
832 AEZ ABG
833 AFA ABG
834 AFB ABG
835 AFC ABG
836 AFD ABG
837 AFE ABG
838 AFF ABG
839 AFG ABG
840 AFH ABG
841 AFI ABG
842 AFJ ABG
843 AFK ABG
844 AFL ABG
845 AFM ABG
846 AFN ABG
847 AFO ABG
848 AFP ABG
849 AFQ ABG
850 AFR ABG
851 AFS ABG
852 AFT ABG
853 AFU ABG
854 AFV ABG
855 AFW ABG
856 AFX ABG
857 AFY ABG
858 AFZ ABH
859 AGA ABH
860 AGB ABH
861 AGC ABH
862 AGD ABH
863 AGE ABH
864 AGF ABH
865 AGG ABH
866 AGH ABH
867 AGI ABH
868 AGJ ABH
869 AGK ABH
870 AGL ABH
871 AGM ABH
872 AGN ABH
873 AGO ABH
874 AGP ABH
875 AGQ ABH
876 AGR ABH
877 AGS ABH
878 AGT ABH
879 AGU ABH
880 AGV ABH
881 AGW ABH
882 AGX ABH
883 AGY ABH
884 AGZ ABI
885 AHA ABI
886 AHB ABI
887 AHC ABI
888 AHD ABI
889 AHE ABI
890 AHF ABI
891 AHG ABI
892 AHH ABI
893 AHI ABI
894 AHJ ABI
895 AHK ABI
896 AHL ABI
897 AHM ABI
898 AHN ABI
899 AHO ABI
900 AHP ABI
901 AHQ ABI
902 AHR ABI
903 AHS ABI
904 AHT ABI
905 AHU ABI
906 AHV ABI
907 AHW ABI
908 AHX ABI
909 AHY ABI
910 AHZ ABJ
911 AIA ABJ
912 AIB ABJ
913 AIC ABJ
914 AID ABJ
915 AIE ABJ
916 AIF ABJ
917 AIG ABJ
918 AIH ABJ
919 AII ABJ
920 AIJ ABJ
921 AIK ABJ
922 AIL ABJ
923 AIM ABJ
924 AIN ABJ
925 AIO ABJ
926 AIP ABJ
927 AIQ ABJ
928 AIR ABJ
929 AIS ABJ
930 AIT ABJ
931 AIU ABJ
932 AIV ABJ
933 AIW ABJ
934 AIX ABJ
935 AIY ABJ
936 AIZ ABK
937 AJA ABK
938 AJB ABK
939 AJC ABK
940 AJD ABK
941 AJE ABK
942 AJF ABK
943 AJG ABK
944 AJH ABK
945 AJI ABK
946 AJJ ABK
947 AJK ABK
948 AJL ABK
949 AJM ABK
950 AJN ABK
951 AJO ABK
952 AJP ABK
953 AJQ ABK
954 AJR ABK
955 AJS ABK
956 AJT ABK
957 AJU ABK
958 AJV ABK
959 AJW ABK
960 AJX ABK
961 AJY ABK
962 AJZ ABL
963 AKA ABL
964 AKB ABL
965 AKC ABL
966 AKD ABL
967 AKE ABL
968 AKF ABL
969 AKG ABL
970 AKH ABL
971 AKI ABL
972 AKJ ABL
973 AKK ABL
974 AKL ABL
975 AKM ABL
976 AKN ABL
977 AKO ABL
978 AKP ABL
979 AKQ ABL
980 AKR ABL
981 AKS ABL
982 AKT ABL
983 AKU ABL
984 AKV ABL
985 AKW ABL
986 AKX ABL
987 AKY ABL
988 AKZ ABM
989 ALA ABM
990 ALB ABM
991 ALC ABM
992 ALD ABM
993 ALE ABM
994 ALF ABM
995 ALG ABM
996 ALH ABM
997 ALI ABM
998 ALJ ABM
999 ALK ABM
1000 ALL ABM
1001 ALM ABM
1002 ALN ABM
1003 ALO ABM
1004 ALP ABM
1005 ALQ ABM
1006 ALR ABM
1007 ALS ABM
1008 ALT ABM
1009 ALU ABM
1010 ALV ABM
1011 ALW ABM
1012 ALX ABM
1013 ALY ABM
1014 ALZ ABN
1015 AMA ABN
1016 AMB ABN
1017 AMC ABN
1018 AMD ABN
1019 AME ABN
1020 AMF ABN
1021 AMG ABN
1022 AMH ABN
1023 AMI ABN
1024 AMJ ABN
1025 AMK ABN
1026 AML ABN
1027 AMM ABN
1028 AMN ABN
1029 AMO ABN
1030 AMP ABN
1031 AMQ ABN
1032 AMR ABN
1033 AMS ABN
1034 AMT ABN
1035 AMU ABN
1036 AMV ABN
1037 AMW ABN
1038 AMX ABN
1039 AMY ABN
1040 AMZ ABO
1041 ANA ABO
1042 ANB ABO
1043 ANC ABO
1044 AND ABO
1045 ANE ABO
1046 ANF ABO
1047 ANG ABO
1048 ANH ABO
1049 ANI ABO
1050 ANJ ABO
1051 ANK ABO
1052 ANL ABO
1053 ANM ABO
1054 ANN ABO
1055 ANO ABO
1056 ANP ABO
1057 ANQ ABO
1058 ANR ABO
1059 ANS ABO
1060 ANT ABO
1061 ANU ABO
1062 ANV ABO
1063 ANW ABO
1064 ANX ABO
1065 ANY ABO
1066 ANZ ABP
1067 AOA ABP
1068 AOB ABP
1069 AOC ABP
1070 AOD ABP
1071 AOE ABP
1072 AOF ABP
1073 AOG ABP
1074 AOH ABP
1075 AOI ABP
1076 AOJ ABP
1077 AOK ABP
1078 AOL ABP
1079 AOM ABP
1080 AON ABP
1081 AOO ABP
1082 AOP ABP
1083 AOQ ABP
1084 AOR ABP
1085 AOS ABP
1086 AOT ABP
1087 AOU ABP
1088 AOV ABP
1089 AOW ABP
1090 AOX ABP
1091 AOY ABP
1092 AOZ ABQ
1093 APA ABQ
1094 APB ABQ
1095 APC ABQ
1096 APD ABQ
1097 APE ABQ
1098 APF ABQ
1099 APG ABQ
1100 APH ABQ
1101 API ABQ
1102 APJ ABQ
1103 APK ABQ
1104 APL ABQ
И ещё одно, я не сказал, что это система счисления по основанию 27. Это система счисления по основанию 27, но нули в ней не используются »
Окончательный код циклом...
sub rc2a1($){
my $j = shift;
my $str = '';
for (;$j>0;$j=int($j/26)){
my $r = $j % 26;
if ($r == 0){
$str='Z'.$str;
$j--;
}
else {$str=chr($r+64).$str;}
}
return $str;
}
Delirium
28-07-2009, 01:20
Спасибо, парни, за такой интерес к моему вопросу :) Вопрос решен :)
Извини Delirium, уже дело принципа :)
Спасибо sergvg, что проверил код. Я что-то расслабился совсем. Я исхожу из принципа, что эта буквенная система представляет собой искажённую 26-чную систему исчисления, но со старшим разрядом из 27 символов. Таким образом, в 4-значное число максимально может иметь значение 27*26*26*26 - 1. (Это не противоречит тому, что 27-разрядное с неиспользуемыми нулями, но меняет логику поиска алгоритма) Протестировал, вроде сходится
string rc2a1(int my_str_number)
{
string str;
int a=my_str_number;
// здесь исправил перепутанное местами деление и остаток,
// добавил компенсацию старшего разряда при делении 27*26*26*26 = (26 + 1)*26*26*26
// и вызов констуктора string исправил.
for(; 26<=a; str=string(1, 'A' + (a%26))+str, a=(a/26)-1) {}
return string(1, 'A' + a)+str;
}
Немного переделав цикл и собрав одинаковые действия в одно, получаем:
string rc2a1(unsigned a)
{
string str;
do {
str=string(1, 'A' + (a%26))+str;
a=(a/26)-1;
} while (a!=-1);
return str;
Delirium, я для себя старался, мне нужно генерировать данные в эксель, использую Perl и Win32::OLE. Так там надо указывать диапазон ячеек в A1-стиле. В общем, задача схожая с твоей :).
pva, первый код не проверял, но во втором, кажись, надо вычесть единицу из аргумента...
sub rc2a1_pva($){
my $str=undef;
my $a =shift;
$a--;
do {
$str=chr(65 + ($a%26)).$str;
$a=int($a/26)-1;
} while ($a!=-1);
return $str;
}
надо вычесть единицу »
Если "A" = 1, то да, если "A" = 0, то не надо. (сишная привычка)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.