ูƒูŠู ูŠุนู…ู„ Microsoft Excel ู…ุน ุงุฑุชูุงุน ุงู„ุตู

ุฃุญูŠุงู†ู‹ุง ุฃุดุนุฑ ุจุงู„ู…ู„ู„ ูˆุงู„ุชุณู„ุญ ุจุงุณุชุฎุฏุงู… ู…ุตุญุญ ุฃุฎุทุงุก ุŒ ุฃุจุฏุฃ ููŠ ุงู„ุจุญุซ ููŠ ุจุฑุงู…ุฌ ู…ุฎุชู„ูุฉ. ู‡ุฐู‡ ุงู„ู…ุฑุฉ ุŒ ูˆู‚ุน ุงุฎุชูŠุงุฑูŠ ุนู„ู‰ Excel ูˆูƒุงู†ุช ู‡ู†ุงูƒ ุฑุบุจุฉ ููŠ ู…ุนุฑูุฉ ูƒูŠููŠุฉ ุชุนุงู…ู„ู‡ ู…ุน ุงุฑุชูุงุน ุงู„ุตููˆู ุŒ ูˆู…ุง ุงู„ุฐูŠ ูŠุฎุฒู†ู‡ ุŒ ูˆูƒูŠู ูŠุฃุฎุฐ ููŠ ุงู„ุงุนุชุจุงุฑ ุงุฑุชูุงุน ู…ุฌู…ูˆุนุฉ ู…ู† ุงู„ุฎู„ุงูŠุง ุŒ ุฅู„ุฎ. ู‚ู…ุช ุจุชุญู„ูŠู„ Excel 2010 (excel.exe ุŒ 32bit ุŒ ุงู„ุฅุตุฏุงุฑ 14.0.4756.1000 ุŒ SHA1 a805cf60a5542f21001b0ea5d142d1cd0ee00b28).


ู„ู†ุจุฏุฃ ุจุงู„ู†ุธุฑูŠุฉ


ุฅุฐุง ุงู†ุชู‚ู„ุช ุฅู„ู‰ ูˆุซุงุฆู‚ VBA ู„ู€ Microsoft Office ุŒ ูŠู…ูƒู†ูƒ ุฃู† ุชุฑู‰ ุฃู†ู‡ ูŠู…ูƒู† ุงู„ุญุตูˆู„ ุนู„ู‰ ุงุฑุชูุงุน ุงู„ุตู ุจุทุฑูŠู‚ุฉ ุฃูˆ ุจุฃุฎุฑู‰ ู…ู† ุฎู„ุงู„ ุฎุงุตูŠุชูŠู†:


  • RowHeight - ุฅุฑุฌุงุน ุฃูˆ ุชุนูŠูŠู† ุงุฑุชูุงุน ุงู„ุตู ุงู„ุฃูˆู„ ููŠ ุงู„ู†ุทุงู‚ ุงู„ู…ุญุฏุฏ ุŒ ู…ู‚ุงุณุฉ ุจุงู„ู†ู‚ุงุท. ู‚ุฑุงุกุฉ / ูƒุชุงุจุฉ ู…ุฒุฏูˆุฌุฉ ุ›
  • Height - ุฅุฑุฌุงุน ู‚ูŠู…ุฉ ู…ุฒุฏูˆุฌุฉ ุชู…ุซู„ ุงุฑุชูุงุน ุงู„ู†ุทุงู‚ ุจุงู„ู†ู‚ุงุท. ู„ู„ู‚ุฑุงุกุฉ ูู‚ุท.

ูˆุฅุฐุง ู†ุธุฑุชู… ู‡ู†ุง ุฃูŠุถู‹ุง: ู…ูˆุงุตูุงุช ุฅูƒุณู„ ูˆุญุฏูˆุฏู‡ุง . ูŠู…ูƒู†ูƒ ุฃู† ุชุฌุฏ ุฃู† ุงู„ุญุฏ ุงู„ุฃู‚ุตู‰ ู„ุงุฑุชูุงุน ุงู„ุตู ู‡ูˆ 409 ู†ู‚ุทุฉ. ู‡ุฐุง ุŒ ู„ู„ุฃุณู ุŒ ุฃุจุนุฏ ู…ุง ูŠูƒูˆู† ุนู† ุงู„ุญุงู„ุฉ ุงู„ูˆุญูŠุฏุฉ ุนู†ุฏู…ุง ุชูƒูˆู† ู…ุณุชู†ุฏุงุช Microsoft ุงู„ุฑุณู…ูŠุฉ ู…ุถู„ู„ุฉ ุจุนุถ ุงู„ุดูŠุก. ููŠ ุงู„ูˆุงู‚ุน ุŒ ููŠ ุฑู…ุฒ Excel ุŒ ูŠุชู… ุชุนูŠูŠู† ุงู„ุญุฏ ุงู„ุฃู‚ุตู‰ ู„ุงุฑุชูุงุน ุงู„ุตู ุฅู„ู‰ 2047 ุจูƒุณู„ ุŒ ูˆุงู„ุชูŠ ุณุชูƒูˆู† 1535.25 ู†ู‚ุทุฉ. ูˆุงู„ุญุฏ ุงู„ุฃู‚ุตู‰ ู„ุญุฌู… ุงู„ุฎุท ู‡ูˆ 409.55 ู†ู‚ุทุฉ. ู…ู† ุงู„ู…ุณุชุญูŠู„ ุงู„ุญุตูˆู„ ุนู„ู‰ ุตู ู…ู† ู‡ุฐุง ุงู„ุงุฑุชูุงุน ุงู„ุถุฎู… ู…ู† ุฎู„ุงู„ ุชุนูŠูŠู†ู‡ ุจุจุณุงุทุฉ ููŠ VBA / Interop ุŒ ูˆู„ูƒู† ูŠู…ูƒู†ูƒ ุฃู† ุชุฃุฎุฐ ุตูู‹ุง ูˆุชุนูŠูŠู† ุฎุท Cambria Math ููŠ ุฎู„ูŠุชู‡ุง ุงู„ุฃูˆู„ู‰ ูˆุชุนูŠูŠู† ุญุฌู… ุงู„ุฎุท ุนู„ู‰ 409.55 ู†ู‚ุทุฉ. ุซู… ุณูŠู‚ูˆู… Excel ุจุงุณุชุฎุฏุงู… ุฎูˆุงุฑุฒู…ูŠุฉ ุงู„ู…ุงูƒุฑุฉ ุงู„ุฎุงุตุฉ ุจู‡ ุจุญุณุงุจ ุงุฑุชูุงุน ุงู„ุตู ุจู†ุงุกู‹ ุนู„ู‰ ุชู†ุณูŠู‚ ุงู„ุฎู„ูŠุฉ ุŒ ูˆุงู„ุญุตูˆู„ ุนู„ู‰ ุฑู‚ู… ูŠุฒูŠุฏ ุนู† 2047 ุจูƒุณู„ (ุตุฏู‚ ุงู„ูƒู„ู…ุฉ) ุŒ ูˆุชุนูŠูŠู† ุงู„ุตู ุนู„ู‰ ุฃู‚ุตู‰ ุงุฑุชูุงุน ู…ู…ูƒู†. ุฅุฐุง ุทู„ุจุช ุงุฑุชูุงุน ู‡ุฐู‡ ุงู„ุณู„ุณู„ุฉ ู…ู† ุฎู„ุงู„ ูˆุงุฌู‡ุฉ ุงู„ู…ุณุชุฎุฏู… ุŒ ูุณูŠู‚ูˆู… Excel ุจุฃู† ุงู„ุงุฑุชูุงุน ู‡ูˆ 409.5 ู†ู‚ุทุฉ ุŒ ูˆู„ูƒู† ุฅุฐุง ุทู„ุจุช ุงุฑุชูุงุน ุงู„ุณู„ุณู„ุฉ ู…ู† ุฎู„ุงู„ VBA ุŒ ูุณุชุญุตู„ ุนู„ู‰ 1535.25 ู†ู‚ุทุฉ ุตุงุฏู‚ุฉ ุŒ ุฃูŠ ู…ุง ูŠุนุงุฏู„ 2047 ุจูƒุณู„. ุตุญูŠุญ ุŒ ุจุนุฏ ุญูุธ ุงู„ู…ุณุชู†ุฏ ุŒ ุณูŠุธู„ ุงู„ุงุฑุชูุงุน ูŠู†ุฎูุถ โ€‹โ€‹ุฅู„ู‰ 409.5 ู†ู‚ุทุฉ. ูŠู…ูƒู† ู…ู„ุงุญุธุฉ ู‡ุฐุง ุงู„ุชู„ุงุนุจ ู‡ู†ุง ููŠ ู‡ุฐุง ุงู„ููŠุฏูŠูˆ: http://recordit.co/ivnFEsELLI


ุฐูƒุฑุช ุงู„ุจูƒุณู„ ููŠ ุงู„ูู‚ุฑุฉ ุงู„ุณุงุจู‚ุฉ ู„ุณุจุจ ู…ุง. ูŠู‚ูˆู… Excel ุจุงู„ูุนู„ ุจุชุฎุฒูŠู† ูˆุญุณุงุจ ุญุฌู… ุงู„ุฎู„ุงูŠุง ููŠ ุงู„ุฃุนุฏุงุฏ ุงู„ุตุญูŠุญุฉ (ุจุดูƒู„ ุนุงู… ูŠู‚ูˆู… ุจูƒู„ ุดูŠุก ู‚ุฏุฑ ุงู„ุฅู…ูƒุงู† ููŠ ุงู„ุฃุนุฏุงุฏ ุงู„ุตุญูŠุญุฉ). ุบุงู„ุจู‹ุง ู…ุง ุชูƒูˆู† ู‡ุฐู‡ ุงู„ุจูƒุณู„ ู…ุถุฑูˆุจุฉ ููŠ ุนุงู…ู„ ู…ุง. ูˆู…ู† ุงู„ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู… ุŒ ุฃู† Excel ูŠุฎุฒู† ู…ู‚ูŠุงุณ ุงู„ู…ุธู‡ุฑ ููŠ ุดูƒู„ ูƒุณุฑ ุนุงุฏูŠ ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุณูŠุชู… ุชุฎุฒูŠู† ู…ู‚ูŠุงุณ 75 ูช ูƒุฑู‚ู…ูŠู† 3 ูˆ 4. ูˆุนู†ุฏู…ุง ูŠูƒูˆู† ู…ู† ุงู„ุถุฑูˆุฑูŠ ุนุฑุถ ุงู„ุตู ุŒ ุณูˆู ูŠุฃุฎุฐ Excel ุงุฑุชูุงุน ุงู„ุตู ูƒุฑู‚ู… ุนุฏุฏ ุตุญูŠุญ ู„ู„ุจูƒุณู„ ุŒ ูˆูŠุถุฑุจ ููŠ 3 ูˆูŠู‚ุณู… ุจุญู„ูˆู„ ุนุงู… 4. ู„ูƒู†ู‡ ุณูŠุฌุฑูŠ ู‡ุฐู‡ ุงู„ุนู…ู„ูŠุฉ ุจุงู„ูุนู„ ููŠ ุงู„ู†ู‡ุงูŠุฉ ุŒ ูˆู…ู† ู‡ุฐุง ุงู„ู…ู†ุทู„ู‚ ุŒ ูŠุชู… ุฅู†ุดุงุก ุงู„ุชุฃุซูŠุฑ ุงู„ุฐูŠ ูŠุนุชุจุฑ ูƒู„ ุดูŠุก ุจุฃุนุฏุงุฏ ูƒุณุฑูŠุฉ. ู„ู„ุชุญู‚ู‚ ู…ู† ุฐู„ูƒ ุŒ ุงูƒุชุจ ุงู„ูƒูˆุฏ ุงู„ุชุงู„ูŠ ููŠ VBA:


w.Rows(1).RowHeight = 75.375 Debug.Print w.Rows(1).Height 

ุณูˆู VBA ู†ุนุทูŠู‡ 75 ู„ ุณูŠูƒูˆู† 75.375 ุจูƒุณู„ 100.5 ุจูƒุณู„ ุŒ ูˆู„ุง ูŠุณุชุทูŠุน Excel ุชุญู…ู„ู‡ ูˆุณูŠู‚ูˆู… ุจุฅุณู‚ุงุท ุงู„ุฌุฒุก ุงู„ูƒุณุฑูŠ ุญุชู‰ 100 ุจูƒุณู„. ุนู†ุฏู…ุง ูŠุทู„ุจ VBA ุงุฑุชูุงุน ุงู„ุตู ููŠ ุงู„ู†ู‚ุงุท ุŒ ูŠู‚ูˆู… Excel ุจุตุฏู‚ ุจุชุฑุฌู…ุฉ 100 ุจูƒุณู„ ุฅู„ู‰ ู†ู‚ุงุท ูˆุฅุฑุฌุงุน 75.


ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ู„ู‚ุฏ ูˆุตู„ู†ุง ุจุงู„ูุนู„ ุฅู„ู‰ ูƒุชุงุจุฉ ูุตู„ ุฏุฑุงุณูŠ ููŠ C # ูŠุตู ู…ุนู„ูˆู…ุงุช ุญูˆู„ ุงุฑุชูุงุน ุงู„ุตู:


 class RowHeightInfo { public ushort Value { get; set; } //    ,   4. public ushort Flags { get; set; } //  } 

ุณูŠุชุนูŠู† ุนู„ูŠูƒ ุฃุฎุฐ ูƒู„ุงู…ูŠ ุงู„ุขู† ุŒ ูˆู„ูƒู† ููŠ Excel ุŒ ูŠุชู… ุชุฎุฒูŠู† ุงุฑุชูุงุน ุงู„ุตู ุจู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ. ุฃูŠ ุฅุฐุง ุชู… ุชุญุฏูŠุฏ ุฃู† ุงุฑุชูุงุน ุงู„ุตู ู‡ูˆ 75 ู†ู‚ุทุฉ ุŒ ูุณูŠูƒูˆู† 100 ุจูƒุณู„ ุŒ ูˆุณูŠุชู… ุชุฎุฒูŠู† 400 ุจุงู„ู‚ูŠู…ุฉ. ู„ู… ุฃูƒู† ู‚ุฏ ุงูƒุชุดูุช ุชู…ุงู…ู‹ุง ู…ุง ุชุนู†ูŠู‡ ุฌู…ูŠุน ุงู„ุจุชุงุช ููŠ ุงู„ุฅุดุงุฑุงุช (ู…ู† ุงู„ุตุนุจ ูˆุทูˆูŠู„ุฉ ู…ุนุฑูุฉ ู‚ูŠู… ุงู„ุฅุดุงุฑุงุช) ุŒ ู„ูƒู†ู†ูŠ ุฃุนู„ู… ุนู„ู‰ ูˆุฌู‡ ุงู„ูŠู‚ูŠู† ูŠุชู… ุชุนูŠูŠู† 0x4000 ู„ู„ุตููˆู ุงู„ุชูŠ ูŠุชู… ุชุนูŠูŠู† ุงุฑุชูุงุนู‡ุง ูŠุฏูˆูŠู‹ุง ุŒ ูˆูŠุชู… ุชุนูŠูŠู† 0x2000 - ู„ู„ุตููˆู ุงู„ู…ุฎููŠุฉ. ุจุดูƒู„ ุนุงู… ุŒ ุจุงู„ู†ุณุจุฉ ู„ู„ุตููˆู ุงู„ู…ุฑุฆูŠุฉ ุฐุงุช ุงู„ุงุฑุชูุงุน ุงู„ู…ุถุจูˆุท ูŠุฏูˆูŠู‹ุง ุŒ ุชุณุงูˆูŠ ุงู„ุฃุนู„ุงู… ุบุงู„ุจู‹ุง 0x4005 ุŒ ูˆุจุงู„ู†ุณุจุฉ ู„ู„ุตููˆู ุงู„ุชูŠ ูŠุชู… ุญุณุงุจ ุงู„ุงุฑุชูุงุน ูˆูู‚ู‹ุง ู„ุชู†ุณูŠู‚ ุงู„ุฅุดุงุฑุงุช ุŒ ุชูƒูˆู† ุฅู…ุง 0xA ุฃูˆ 0x800E.


ู†ุณุฃู„ ุงุฑุชูุงุน ุงู„ุตู


ุงู„ุขู† ุŒ ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ูŠู…ูƒู†ูƒ ุฅู„ู‚ุงุก ู†ุธุฑุฉ ุนู„ู‰ ุงู„ุทุฑูŠู‚ุฉ ู…ู† excel.exe ุŒ ูˆุงู„ุชูŠ ุชูุฑุฌุน ุงุฑุชูุงุน ุงู„ุตู ุจูˆุงุณุทุฉ ูู‡ุฑุณู‡ุง (ุจูุถู„ HexRays ู„ู„ุฑู…ุฒ ุงู„ุฌู…ูŠู„):


 int __userpurge GetRowHeight@<eax>(signed int rowIndex@<edx>, SheetLayoutInfo *sheetLayoutInfo@<esi>, bool flag) { RowHeightInfo *rowHeightInfo; // eax int result; // ecx if ( sheetLayoutInfo->dword1A0 ) return sheetLayoutInfo->defaultFullRowHeightMul4 | (~(sheetLayoutInfo->defaultRowDelta2 >> 14 << 15) & 0x8000); if ( rowIndex < sheetLayoutInfo->MinRowIndexNonDefault ) return sheetLayoutInfo->defaultFullRowHeightMul4 | (~(sheetLayoutInfo->defaultRowDelta2 >> 14 << 15) & 0x8000); if ( rowIndex >= sheetLayoutInfo->MaxRowIndexNonDefault ) return sheetLayoutInfo->defaultFullRowHeightMul4 | (~(sheetLayoutInfo->defaultRowDelta2 >> 14 << 15) & 0x8000); rowHeightInfo = GetRowHeightCore(sheetLayoutInfo, rowIndex); if ( !rowHeightInfo ) return sheetLayoutInfo->defaultFullRowHeightMul4 | (~(sheetLayoutInfo->defaultRowDelta2 >> 14 << 15) & 0x8000); result = 0; if ( flag || !(rowHeightInfo->Flags & 0x2000) ) result = rowHeightInfo->Value; if ( !(rowHeightInfo->Flags & 0x4000) ) result |= 0x8000u; return result; } 

ู…ุง ู‡ูˆ dword1A0 ุŒ ู…ุง ุฒู„ุช ู„ู… ุฃุญุณุจ. ู„ุง ูŠู…ูƒู† ุงู„ุนุซูˆุฑ ุนู„ู‰ ู…ูƒุงู† ุญูŠุซ ุชู… ุชุนูŠูŠู† ู‡ุฐู‡ ุงู„ุนู„ุงู…ุฉ :(
ู…ุง ู‡ูˆ defaultRowDelta2 ุจุงู„ู†ุณุจุฉ ู„ูŠ ุŒ ุฃูŠุถุง ุŒ ู„ุง ูŠุฒุงู„ ู„ุบุฒุง. ุนู†ุฏู…ุง ูŠุญุณุจ excel ุงุฑุชูุงุน ุงู„ุตู ุจู†ุงุกู‹ ุนู„ู‰ ุงู„ุชู†ุณูŠู‚ ุŒ ูุฅู†ู‡ ูŠู…ุซู„ู‡ ูƒู…ุฌู…ูˆุน ุฑู‚ู…ูŠู†. defaultRowDelta2 ู‡ูˆ ุงู„ุฑู‚ู… ุงู„ุซุงู†ูŠ ู…ู† ู‡ุฐุง ุงู„ู…ุจู„ุบ ู„ุงุฑุชูุงุน ุงู„ุตู ุงู„ู‚ูŠุงุณูŠ. ู‚ูŠู…ุฉ ุงู„ู…ุนู„ู…ุฉ ุงู„ุนู„ู… ู‡ูŠ ุฃูŠุถุง ุบุงู…ุถุฉ ุŒ ู„ุฃู† ุฃูŠู†ู…ุง ุฑุฃูŠุช ุฏุนูˆุฉ ู„ู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ููŠ ุงู„ุนู„ู… ู…ุฑุช ูƒุงุฐุจุฉ.
ุชุธู‡ุฑ ูุฆุฉ SheetLayoutInfo ุฃูŠุถู‹ุง ููŠ ู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ. ู‚ู…ุช ุจุชุณู…ูŠุชู‡ ุจู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ุŒ ู„ุฃู†ู‡ ูŠุฎุฒู† ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ู…ุนู„ูˆู…ุงุช ุญูˆู„ ู…ุธู‡ุฑ ุงู„ูˆุฑู‚ุฉ. ููŠ SheetLayoutInfo ู‡ู†ุงูƒ ู…ุฌุงู„ุงุช ู…ุซู„:


  • DefaultFullRowHeightMul4 - ุงุฑุชูุงุน ุงู„ุตู ุงู„ู‚ูŠุงุณูŠ ุ›
  • MinRowIndexNonDefault - ูู‡ุฑุณ ุงู„ุตู ุงู„ุฃูˆู„ ุŒ ุญูŠุซ ูŠุฎุชู„ู ุงู„ุงุฑุชูุงุน ุนู† ุงู„ู…ุนูŠุงุฑ ุ›
  • MaxRowIndexNonDefault - ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ุจุนุฏ ุขุฎุฑู‡ุง ุŒ ุญูŠุซ ูŠุฎุชู„ู ุงู„ุงุฑุชูุงุน ุนู† ุงู„ู…ุนูŠุงุฑ ุ›
  • DefaultRowDelta2 ู‡ูˆ ู†ูุณ ุงู„ุฌุฒุก ู…ู† ู…ุฌู…ูˆุน ุงุฑุชูุงุน ุงู„ุตู ุงู„ู‚ูŠุงุณูŠ.
  • GroupIndexDelta - ุงู„ู…ุฒูŠุฏ ุญูˆู„ ู‡ุฐุง ุงู„ุฃู…ุฑ ู„ุงุญู‚ู‹ุง

ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ู…ู†ุทู‚ ู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ู…ูู‡ูˆู…:


  1. ุฅุฐุง ูƒุงู† ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ุฃู‚ู„ ู…ู† ุงู„ุฃูˆู„ ู…ุน ุงุฑุชูุงุน ุบูŠุฑ ู‚ูŠุงุณูŠ ุŒ ูู‚ู… ุจุฅุฑุฌุงุน ุงู„ู…ุนูŠุงุฑ ุ›
  2. ุฅุฐุง ูƒุงู† ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ุฃูƒุจุฑ ู…ู† ุงู„ุฃุฎูŠุฑ ู…ุน ุงุฑุชูุงุน ุบูŠุฑ ู‚ูŠุงุณูŠ ุŒ ูู‚ู… ุจุฅุฑุฌุงุน ุงู„ู…ุนูŠุงุฑ ุ›
  3. ุฎู„ุงู ุฐู„ูƒ ุŒ ู†ุญุตู„ ุนู„ู‰ ูƒุงุฆู† rowHeightInfo ู„ู„ุณู„ุณู„ุฉ ู…ู† ุฃุณู„ูˆุจ GetRowHeightCore ุ›
  4. ุฅุฐุง ู‚ุงู… rowHeightInfo == null ุจุฅุฑุฌุงุน ุงุฑุชูุงุน ุงู„ุตู ุงู„ู‚ูŠุงุณูŠ ุ›
  5. ู‡ู†ุงูƒ ุณุญุฑ ู…ุน ุงู„ุฃุนู„ุงู… ุŒ ูˆู„ูƒู† ุจุดูƒู„ ุนุงู… ุŒ ู†ุฑุฌุน ู…ุง ู‡ูˆ ููŠ ุตูHeightInfo.Value ูˆู†ุถุน ุงู„ุจุช ุงู„ุณุงุฏุณ ุนุดุฑ ููŠ ุงู„ุงุณุชุฌุงุจุฉ ุฅุฐุง ู„ู… ูŠุชู… ุถุจุท ุงุฑุชูุงุน ุงู„ุตู ูŠุฏูˆูŠู‹ุง.

ุฅุฐุง ู‚ู…ุช ุจุฅุนุงุฏุฉ ูƒุชุงุจุฉ ู‡ุฐุง ุงู„ุฑู…ุฒ ููŠ C # ุŒ ูุณุชุญุตู„ ุนู„ู‰ ุดูŠุก ู…ุซู„ ุงู„ุชุงู„ูŠ:


 const ulong HiddenRowMask = 0x2000; const ulong CustomHeightMask = 0x4000; const ushort DefaultHeightMask = 0x8000; public static ushort GetRowHeight(int rowIndex, SheetLayoutInfo sheetLayoutInfo) { ushort defaultHeight = (ushort) (sheetLayoutInfo.DefaultFullRowHeightMul4 | (~(sheetLayoutInfo.DefaultRowDelta2 >> 14 << 15) & DefaultHeightMask)); if (rowIndex < sheetLayoutInfo.MinRowIndexNonDefault) return defaultHeight; if (rowIndex >= sheetLayoutInfo.MaxRowIndexNonDefault) return defaultHeight; RowHeightInfo rowHeightInfo = GetRowHeightCore(sheetLayoutInfo, rowIndex); if (rowHeightInfo == null) return defaultHeight; ushort result = 0; if ((rowHeightInfo.Flags & HiddenRowMask) == 0) result = rowHeightInfo.Value; if ((rowHeightInfo.Flags & CustomHeightMask) == 0) result |= DefaultHeightMask; return result; } 

ูŠู…ูƒู†ูƒ ุงู„ุขู† ุฅู„ู‚ุงุก ู†ุธุฑุฉ ุนู„ู‰ ู…ุง ูŠุญุฏุซ ุฏุงุฎู„ GetRowHeightCore:


 RowHeightInfo *__fastcall GetRowHeightCore(SheetLayoutInfo *sheetLayoutInfo, signed int rowIndex) { RowHeightInfo *result; // eax RowsGroupInfo *rowsGroupInfo; // ecx int rowInfoIndex; // edx result = 0; if ( rowIndex < sheetLayoutInfo->MinRowIndexNonDefault || rowIndex >= sheetLayoutInfo->MaxRowIndexNonDefault ) return result; rowsGroupInfo = sheetLayoutInfo->RowsGroups[sheetLayoutInfo-GroupIndexDelta + (rowIndex >> 4)]; result = 0; if ( !rowsGroupInfo ) return result; rowInfoIndex = rowsGroupInfo->Indices[rowIndex & 0xF]; if ( rowInfoIndex ) result = (rowsGroupInfo + 8 * (rowInfoIndex + rowsGroupInfo->wordBA + rowsGroupInfo->wordBC - rowsGroupInfo->wordB8)); return result; } 

  1. ู…ุฑุฉ ุฃุฎุฑู‰ ุŒ ููŠ ุงู„ุจุฏุงูŠุฉ ุŒ ูŠุชุญู‚ู‚ Excel ู„ู…ุนุฑูุฉ ู…ุง ุฅุฐุง ูƒุงู† ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ู…ู† ุจูŠู† ุงู„ุตููˆู ุฐุงุช ุงู„ุงุฑุชูุงุน ุงู„ู…ุนุฏู„ ุŒ ูˆุฅุฐุง ู„ู… ูŠูƒู† ุงู„ุฃู…ุฑ ูƒุฐู„ูƒ ุŒ ูุณูŠุชู… ุฅุฑุฌุงุน ู‚ูŠู…ุฉ ุฎุงู„ูŠุฉ.
  2. ูŠุนุซุฑ ุนู„ู‰ ู…ุฌู…ูˆุนุฉ ุงู„ุตููˆู ุงู„ู…ุฑุบูˆุจุฉ ุ› ูˆุฅุฐุง ู„ู… ูŠูƒู† ู‡ู†ุงูƒ ู…ุซู„ ู‡ุฐู‡ ุงู„ู…ุฌู…ูˆุนุฉ ุŒ ูุฅู†ู‡ุง ุชูุฑุฌุน ุฎุงู„ูŠุฉ.
  3. ุงู„ุญุตูˆู„ ุนู„ู‰ ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ.
  4. ุนู„ุงูˆุฉ ุนู„ู‰ ุฐู„ูƒ ุŒ ู…ู† ุฎู„ุงู„ ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ุŒ ูุฅู†ู‡ ูŠุนุซุฑ ุนู„ู‰ ุงู„ูƒุงุฆู† ุงู„ู…ุทู„ูˆุจ ู…ู† ูุฆุฉ RowHeightInfo. wordBA ุŒ wordBC ุŒ wordB8 - ุจุนุถ ุงู„ุซูˆุงุจุช. ุฃู†ู‡ุง ุชุชุบูŠุฑ ูู‚ุท ู…ุน ุงู„ุชุงุฑูŠุฎ. ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ูุฅู†ู‡ุง ู„ุง ุชุคุซุฑ ุนู„ู‰ ูู‡ู… ุงู„ุฎูˆุงุฑุฒู…ูŠุฉ.

ู‡ู†ุง ูŠุฌุฏุฑ ุงู„ุงู†ุญุฑุงู ุนู† ุงู„ู…ูˆุถูˆุน ูˆุฅุฎุจุงุฑู†ุง ุฃูƒุซุฑ ุนู† RowsGroupInfo. ูŠู‚ูˆู… Excel ุจุชุฎุฒูŠู† RowHeightInfo ููŠ ู…ุฌู…ูˆุนุงุช ู…ูƒูˆู†ุฉ ู…ู† 16 ู‚ุทุนุฉ ุŒ ุญูŠุซ ุชู‚ูˆู… ุงู„ู…ุฌู…ูˆุนุฉ i ุŒ ุงู„ู…ู…ุซู„ุฉ ููŠ ูุฆุฉ RowsGroupInfo ุŒ ุจุชุฎุฒูŠู† ู…ุนู„ูˆู…ุงุช ุญูˆู„ ุงู„ุตููˆู ู…ู† i ร— 16 ุฅู„ู‰ i ร— 16 + 15 ุดุงู…ู„ุฉ.


ู„ูƒู† ูŠุชู… ุชุฎุฒูŠู† ู…ุนู„ูˆู…ุงุช ุงุฑุชูุงุน ุงู„ุตู ููŠ RowsGroupInfo ุจุทุฑูŠู‚ุฉ ุบูŠุฑ ุนุงุฏูŠุฉ ุฅู„ู‰ ุญุฏ ู…ุง. ุนู„ู‰ ุงู„ุฃุฑุฌุญ ุจุณุจุจ ุงู„ุญุงุฌุฉ ุฅู„ู‰ ุงู„ุญูุงุธ ุนู„ู‰ ุงู„ุชุงุฑูŠุฎ ููŠ Excel.


ู‡ู†ุงูƒ ุซู„ุงุซุฉ ุญู‚ูˆู„ ู…ู‡ู…ุฉ ููŠ RowsGroupInfo: ุงู„ู…ุคุดุฑุงุช ูˆ HeightInfos ูˆ RowsCount ุŒ ูˆุงู„ุซุงู†ูŠ ุบูŠุฑ ู…ุฑุฆูŠ ููŠ ุงู„ุชุนู„ูŠู…ุฉ ุงู„ุจุฑู…ุฌูŠุฉ ุฃุนู„ุงู‡ (ูŠุฌุจ ุฃู† ูŠูƒูˆู† ููŠ ู‡ุฐุง ุงู„ุณุทุฑ: (rowsGroupInfo + 8 ร— (...)) ุŒ ู„ุฃู† rowInfoIndex ูŠู…ูƒู† ุฃู† ูŠุฃุฎุฐ ู‚ูŠู…ู‹ุง ู…ุฎุชู„ูุฉ ุฌุฏู‹ุง ุŒ ู„ู‚ุฏ ุฑุฃูŠุช ุฃูƒุซุฑ ู…ู† 1000 ูˆู„ูŠุณ ู„ุฏูŠ ุฃูŠ ููƒุฑุฉ ุนู† ูƒูŠููŠุฉ ุชุนูŠูŠู† ู…ุซู„ ู‡ุฐุง ุงู„ู‡ูŠูƒู„ ููŠ ุงู„ู…ุคุณุณุฉ ุงู„ุฏูˆู„ูŠุฉ ู„ู„ุชู†ู…ูŠุฉ. ู„ุง ูŠุธู‡ุฑ ุญู‚ู„ RowsCount ููŠ ุงู„ูƒูˆุฏ ุฃุนู„ุงู‡ ุŒ ูˆู„ูƒู† ู‡ุฐุง ู‡ูˆ ุนุฏุฏ ุงู„ุตููˆู ุบูŠุฑ ุงู„ู‚ูŠุงุณูŠุฉ ุงู„ู…ุฎุฒู‘ู†ุฉ ุญู‚ู‹ุง ููŠ ุงู„ู…ุฌู…ูˆุนุฉ.
ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ููŠ SheetLayoutInfo ู‡ู†ุงูƒ GroupIndexDelta - ุงู„ูุฑู‚ ุจูŠู† ุงู„ูู‡ุฑุณ ุงู„ุญู‚ูŠู‚ูŠ ู„ู„ู…ุฌู…ูˆุนุฉ ูˆูู‡ุฑุณ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰ ู…ุน ุงุฑุชูุงุน ุงู„ุตู ุงู„ู…ุนุฏู„.


ูŠุฎุฒู† ุญู‚ู„ ุงู„ู…ุคุดุฑุงุช ู…ุคุดุฑุงุช ุฅุฒุงุญุฉ RowHeightInfo ู„ูƒู„ ูู‡ุฑุณ ู…ู† ุงู„ุณู„ุณู„ุฉ ุฏุงุฎู„ ุงู„ู…ุฌู…ูˆุนุฉ. ูŠุชู… ุชุฎุฒูŠู†ู‡ุง ู‡ู†ุงูƒ ุจุงู„ุชุฑุชูŠุจ ุŒ ูˆู„ูƒู† ููŠ HeightInfos ูŠุชู… ุชุฎุฒูŠู† RowHeightInfo ุจุงู„ูุนู„ ุจุชุฑุชูŠุจ ุงู„ุชุบูŠูŠุฑ.


ู„ู†ูุชุฑุถ ุฃู† ู„ุฏูŠู†ุง ูˆุฑู‚ุฉ ูุงุฑุบุฉ ุฌุฏูŠุฏุฉ ูˆุจุทุฑูŠู‚ุฉ ู…ุง ู‚ู…ู†ุง ุจุชุบูŠูŠุฑ ุงุฑุชูุงุน ุฑู‚ู… ุงู„ุตู 23. ูŠู‚ุน ู‡ุฐุง ุงู„ุตู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ ุงู„ู…ูƒูˆู†ุฉ ู…ู† 16 ุตูู‹ุง ุŒ ุซู…:


  1. ุณูŠุญุฏุฏ Excel ูู‡ุฑุณ ุงู„ู…ุฌู…ูˆุนุฉ ู„ู‡ุฐู‡ ุงู„ุณู„ุณู„ุฉ. ููŠ ุงู„ุญุงู„ุฉ ุงู„ุญุงู„ูŠุฉ ุŒ ุณูŠูƒูˆู† ุงู„ูู‡ุฑุณ 1 ูˆุณูŠุบูŠุฑ GroupIndexDelta = -1.
  2. ูŠู†ุดุฆ ูƒุงุฆู†ู‹ุง ู…ู† ูุฆุฉ RowsGroupInfo ู„ุณู„ุณู„ุฉ ู…ู† ุงู„ุตููˆู ูˆูŠุถุนู‡ุง ููŠ sheetLayoutInfo-> RowsGroups ุชุญุช ุงู„ูู‡ุฑุณ 0 (sheetLayoutInfo-> GroupIndexDelta + 1)ุ›
  3. ููŠ RowsGroupInfo ุŒ ุณูŠุฎุตุต Excel ุงู„ุฐุงูƒุฑุฉ ู„ู€ 16 ู…ุคุดุฑุงุช 4 ุจุงูŠุช ุŒ ูˆ RowsCount ุŒ ูˆ wordBA ุŒ ูˆ wordBC ุŒ ูˆ wordB8 ุŒ ูˆู…ุง ุฅู„ู‰ ุฐู„ูƒ ุ›
  4. ุซู… ูŠู‚ูˆู… Excel ุจุญุณุงุจ ูู‡ุฑุณ ุงู„ุณู„ุณู„ุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ู…ู† ุฎู„ุงู„ ุนู…ู„ูŠุฉ AND ุงู„ุจุทูŠุฆุฉ (ู‡ุฐุง ุฃุณุฑุน ุจูƒุซูŠุฑ ู…ู† ุฃุฎุฐ ุจุงู‚ูŠ ุงู„ู‚ุณู…): rowIndex & 0xF. ุณูŠูƒูˆู† ุงู„ูู‡ุฑุณ ุงู„ู…ุทู„ูˆุจ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ: 23 & 0xF = 7ุ›
  5. ุจุนุฏ ุฐู„ูƒ ุŒ ูŠุญุตู„ Excel ุนู„ู‰ ุงู„ุฅุฒุงุญุฉ ู„ู„ูู‡ุฑุณ 7: ุฅุฒุงุญุฉ = ู…ุคุดุฑุงุช [7]. ุฅุฐุง ุชู… ุงู„ุฅุฒุงุญุฉ = 0 ุŒ ูุณูŠุฎุตุต Excel 8 ุจุงูŠุช ููŠ ู†ู‡ุงูŠุฉ RowsGroupInto ุŒ ูˆูŠุฒูŠุฏ RowsCount ุจูˆุงุญุฏ ุŒ ูˆูŠูƒุชุจ ุงู„ุฅุฒุงุญุฉ ุงู„ุฌุฏูŠุฏุฉ ู„ู„ู…ุคุดุฑุงุช [7]. ููŠ ุฃูŠ ุญุงู„ ุŒ ููŠ ุงู„ู†ู‡ุงูŠุฉ ุŒ ูŠูƒุชุจ Excel ู…ุนู„ูˆู…ุงุช ุญูˆู„ ุงุฑุชูุงุน ุงู„ุตู ุงู„ุฌุฏูŠุฏ ูˆุงู„ุฃุนู„ุงู… ุนู†ุฏ ุงู„ุฅุฒุงุญุฉ ููŠ RowsGroupInfo.

ุชุจุฏูˆ ุงู„ูุฆุฉ RowsGroupInfo ููŠ C # ู†ูุณู‡ุง ูƒู…ุง ูŠู„ูŠ:


 class RowsGroupInfo { public int[] Indices { get; } public List<RowHeightInfo> HeightInfos { get; } public RowsGroupInfo() { Indices = new int[SheetLayoutInfo.MaxRowsCountInGroup]; HeightInfos = new List<RowHeightInfo>(); for (int i = 0; i < SheetLayoutInfo.MaxRowsCountInGroup; i++) { Indices[i] = -1; } } } 

ุณุชุจุฏูˆ ุทุฑูŠู‚ุฉ GetRowHeightCore ุจุงู„ุดูƒู„ ุงู„ุชุงู„ูŠ:


 static RowHeightInfo GetRowHeightCore(SheetLayoutInfo sheetLayoutInfo, int rowIndex) { if (rowIndex < sheetLayoutInfo.MinRowIndexNonDefault || rowIndex >= sheetLayoutInfo.MaxRowIndexNonDefault) return null; RowsGroupInfo rowsGroupInfo = sheetLayoutInfo.RowsGroups[sheetLayoutInfo.GroupIndexDelta + (rowIndex >> 4)]; if (rowsGroupInfo == null) return null; int rowInfoIndex = rowsGroupInfo.Indices[rowIndex & 0xF]; return rowInfoIndex != -1 ? rowsGroupInfo.HeightInfos[rowInfoIndex] : null; } 

ูˆู‡ุฐุง ู…ุง ุณูŠุจุฏูˆ ุนู„ูŠู‡ SetRowHeight (ู„ู… ุฃุฐูƒุฑ ุงู„ูƒูˆุฏ ุงู„ุฎุงุต ุจู‡ ู…ู† excel.exe):


 public static void SetRowHeight(int rowIndex, ushort newRowHeight, ushort flags, SheetLayoutInfo sheetLayoutInfo) { sheetLayoutInfo.MaxRowIndexNonDefault = Math.Max(sheetLayoutInfo.MaxRowIndexNonDefault, rowIndex + 1); sheetLayoutInfo.MinRowIndexNonDefault = Math.Min(sheetLayoutInfo.MinRowIndexNonDefault, rowIndex); int realGroupIndex = rowIndex >> 4; if (sheetLayoutInfo.RowsGroups.Count == 0) { sheetLayoutInfo.RowsGroups.Add(null); sheetLayoutInfo.GroupIndexDelta = -realGroupIndex; } else if (sheetLayoutInfo.GroupIndexDelta + realGroupIndex < 0) { int bucketSize = -(sheetLayoutInfo.GroupIndexDelta + realGroupIndex); sheetLayoutInfo.RowsGroups.InsertRange(0, new RowsGroupInfo[bucketSize]); sheetLayoutInfo.GroupIndexDelta = -realGroupIndex; } else if (sheetLayoutInfo.GroupIndexDelta + realGroupIndex >= sheetLayoutInfo.RowsGroups.Count) { int bucketSize = sheetLayoutInfo.GroupIndexDelta + realGroupIndex - sheetLayoutInfo.RowsGroups.Count + 1; sheetLayoutInfo.RowsGroups.AddRange(new RowsGroupInfo[bucketSize]); } RowsGroupInfo rowsGroupInfo = sheetLayoutInfo.RowsGroups[sheetLayoutInfo.GroupIndexDelta + realGroupIndex]; if (rowsGroupInfo == null) { rowsGroupInfo = new RowsGroupInfo(); sheetLayoutInfo.RowsGroups[sheetLayoutInfo.GroupIndexDelta + realGroupIndex] = rowsGroupInfo; } int rowInfoIndex = rowsGroupInfo.Indices[rowIndex & 0xF]; RowHeightInfo rowHeightInfo; if (rowInfoIndex == -1) { rowHeightInfo = new RowHeightInfo(); rowsGroupInfo.HeightInfos.Add(rowHeightInfo); rowsGroupInfo.Indices[rowIndex & 0xF] = rowsGroupInfo.HeightInfos.Count - 1; } else { rowHeightInfo = rowsGroupInfo.HeightInfos[rowInfoIndex]; } rowHeightInfo.Value = newRowHeight; rowHeightInfo.Flags = flags; } 

ู‚ู„ูŠู„ุง ู…ู† ุงู„ู…ู…ุงุฑุณุฉ


ุจุนุฏ ุงู„ู…ุซุงู„ ุฃุนู„ุงู‡ ุŒ ู…ุน ุญุฏูˆุซ ุชุบูŠูŠุฑ ููŠ ุงุฑุชูุงุน ุงู„ุตู 23 ุŒ ุณูŠุจุฏูˆ Excel ู…ุซู„ ู‡ุฐุง (ู„ู‚ุฏ ู‚ู…ุช ุจุชุนูŠูŠู† ุงู„ุตู 23 ุนู„ู‰ ุงุฑุชูุงุน 75 ู†ู‚ุทุฉ):


sheetLayoutInfo
  • DefaultFullRowHeightMul4 = 80
  • DefaultRowDelta2 = 5
  • MaxRowIndexNonDefault = 24
  • MinRowIndexNonDefault = 23
  • GroupIndexDelta = -1
  • ุนุฏุฏ ู…ุฌู…ูˆุนุงุช Rows = 1
    • [0] RowsGroupInfo
    • ุงุฑุชูุงุน HeightInfos = 1
      • [0] RowHeightInfo
      • ุงู„ุฃุนู„ุงู… = 0x4005
      • ุงู„ู‚ูŠู…ุฉ = 100
    • ุงู„ู…ุคุดุฑุงุช
      • [0] = -1
      • [1] = -1
      • [2] = -1
      • [3] = -1
      • [4] = -1
      • [5] = -1
      • [6] = -1
      • [7] = 0
      • [8] = -1
      • [9] = -1
      • [10] = -1
      • [11] = -1
      • [12] = -1
      • [13] = -1
      • [14] = -1
      • [15] = -1

ู‡ู†ุง ูˆููŠ ุงู„ู…ุซุงู„ ุงู„ุชุงู„ูŠ ุŒ ุณุฃุถุน ุนุฑุถู‹ุง ุชุฎุทูŠุทูŠู‹ุง ู„ูƒูŠููŠุฉ ุธู‡ูˆุฑ ุงู„ุจูŠุงู†ุงุช ููŠ ุฐุงูƒุฑุฉ Excel ุŒ ุงู„ุชูŠ ุชู… ุฅุฌุฑุงุคู‡ุง ููŠ Visual Studio ู…ู† ุงู„ูุตูˆู„ ุงู„ู…ูƒุชูˆุจุฉ ุฐุงุชูŠุง ุŒ ู„ุฃู† ุงู„ุชูุฑูŠุบ ุงู„ู…ุจุงุดุฑ ู…ู† ุงู„ุฐุงูƒุฑุฉ ู„ูŠุณ ุบู†ูŠ ุจุงู„ู…ุนู„ูˆู…ุงุช.
ุงู„ุขู† ุฏุนูˆู†ุง ู†ุญุงูˆู„ ุฅุฎูุงุก ุงู„ุตู 23. ู„ู„ู‚ูŠุงู… ุจุฐู„ูƒ ุŒ ู‚ู… ุจุชุนูŠูŠู† 0x2000 ุจุช ู…ู† ุงู„ุฅุดุงุฑุงุช. ุณูˆู ู†ุบูŠุฑ ุงู„ุฐุงูƒุฑุฉ ู„ู†ุนูŠุด. ูŠู…ูƒู† ุฑุคูŠุฉ ุงู„ู†ุชูŠุฌุฉ ููŠ ู‡ุฐุง ุงู„ููŠุฏูŠูˆ: http://recordit.co/79vYIbwbzB .
ูƒู„ู…ุง ู‚ู…ุช ุจุฅุฎูุงุก ุงู„ุตููˆู ุŒ ูŠู‚ูˆู… Excel ุจู†ูุณ ุงู„ุดูŠุก.
ุงู„ุขู† ู„ู†ู‚ู… ุจุชุนูŠูŠู† ุงุฑุชูุงุน ุงู„ุตู ุจุดูƒู„ ุบูŠุฑ ุตุฑูŠุญ ุŒ ูˆู„ูƒู† ู…ู† ุฎู„ุงู„ ุชู†ุณูŠู‚ ุงู„ุฎู„ูŠุฉ. ุงุณู…ุญ ู„ู„ุฎุท ุงู„ู…ูˆุฌูˆุฏ ููŠ ุงู„ุฎู„ูŠุฉ A20 ุฃู† ูŠุตู„ ุฅู„ู‰ 40 ู†ู‚ุทุฉ ุŒ ุซู… ุณูŠูƒูˆู† ุงุฑุชูุงุน ุงู„ุฎู„ูŠุฉ ููŠ ุงู„ู†ู‚ุงุท 45.75 ูˆููŠ ุฐุงูƒุฑุฉ Excel ุณูŠูƒูˆู† ู…ุซู„ ู‡ุฐุง:
sheetLayoutInfo
  • DefaultFullRowHeightMul4 = 80
  • DefaultRowDelta2 = 5
  • MaxRowIndexNonDefault = 24
  • MinRowIndexNonDefault = 20
  • GroupIndexDelta = -1
  • ุนุฏุฏ ู…ุฌู…ูˆุนุงุช Rows = 1
    • [0] RowsGroupInfo
    • ุงุฑุชูุงุน HeinInfos = 2
      • [0] RowHeightInfo
      • ุงู„ุฃุนู„ุงู… = 0x4005
      • ุงู„ู‚ูŠู…ุฉ = 100
      • [1] RowHeightInfo
      • ุงู„ุฃุนู„ุงู… = 0x800E
      • ุงู„ู‚ูŠู…ุฉ = 244
    • ุงู„ู…ุคุดุฑุงุช
      • [0] = -1
      • [1] = -1
      • [2] = -1
      • [3] = -1
      • [4] = 1
      • [5] = -1
      • [6] = -1
      • [7] = 0
      • [8] = -1
      • [9] = -1
      • [10] = -1
      • [11] = -1
      • [12] = -1
      • [13] = -1
      • [14] = -1
      • [15] = -1

ู‚ุฏ ุชู„ุงุญุธ ุฃู† Excel ูŠุฎุฒู† ุฏุงุฆู…ู‹ุง ุงุฑุชูุงุน ุงู„ุตู ุฅุฐุง ู„ู… ูŠูƒู† ู‚ูŠุงุณูŠู‹ุง. ุญุชู‰ ุฅุฐุง ู„ู… ูŠุชู… ุชุนูŠูŠู† ุงู„ุงุฑุชูุงุน ุจุดูƒู„ ุตุฑูŠุญ ุŒ ูˆู„ูƒู† ุชู… ุญุณุงุจู‡ ุงุณุชู†ุงุฏู‹ุง ุฅู„ู‰ ู…ุญุชูˆูŠุงุช ุงู„ุฎู„ุงูŠุง ุฃูˆ ุงู„ุชู†ุณูŠู‚ ุŒ ูุณูŠุธู„ Excel ูŠุญุณุจู‡ุง ู…ุฑุฉ ูˆุงุญุฏุฉ ูˆูŠุถุน ุงู„ู†ุชูŠุฌุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ู…ู†ุงุณุจุฉ.


ู†ุญู† ู†ุชุนุงู…ู„ ู…ุน ุงู„ุฅุฏุฑุงุฌ / ุญุฐู ุงู„ุตููˆู


ุณูŠูƒูˆู† ู…ู† ุงู„ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู… ุชุญู„ูŠู„ ู…ุง ูŠุญุฏุซ ุนู†ุฏ ุฅุฏุฑุงุฌ / ุญุฐู ุงู„ุตููˆู. ู„ูŠุณ ู…ู† ุงู„ุตุนุจ ุงู„ุนุซูˆุฑ ุนู„ู‰ ุงู„ูƒูˆุฏ ุงู„ู…ู‚ุงุจู„ ููŠ excel.exe ุŒ ูˆู„ูƒู† ู„ู… ุชูƒู† ู‡ู†ุงูƒ ุฑุบุจุฉ ููŠ ุชููƒูŠูƒู‡ ุŒ ูŠู…ูƒู†ูƒ ุฅู„ู‚ุงุก ู†ุธุฑุฉ ุนู„ู‰ ุฌุฒุก ู…ู†ู‡:


sub_305EC930

ูŠุญุฏุฏ ุงู„ุนู„ู… a5 ุงู„ุนู…ู„ูŠุฉ ุงู„ุชูŠ ุชุฌุฑูŠ ุญุงู„ูŠู‹ุง.


 int __userpurge sub_305EC930@<eax>(int a1@<eax>, int a2@<edx>, int a3@<ecx>, int a4, int a5, int a6) { int v6; // esi int v7; // ebx int v8; // edi int v9; // edx int v10; // ecx size_t v11; // eax _WORD *v12; // ebp size_t v13; // eax size_t v14; // eax int v15; // eax unsigned __int16 *v16; // ecx _WORD *v17; // eax _WORD *v18; // ecx int v19; // edx __int16 v20; // bx int v21; // eax _WORD *v22; // ecx int v24; // edx int v25; // eax int v26; // esi int v27; // ebx size_t v28; // eax int v29; // ebp size_t v30; // eax int v31; // esi size_t v32; // eax int v33; // eax unsigned __int16 *v34; // ecx int v35; // eax _WORD *v36; // edx _WORD *v37; // ecx int v38; // eax __int16 v39; // bx int v40; // eax _WORD *v41; // ecx int v42; // [esp+10h] [ebp-48h] int v43; // [esp+10h] [ebp-48h] int v44; // [esp+14h] [ebp-44h] char v45; // [esp+14h] [ebp-44h] int Dst[16]; // [esp+18h] [ebp-40h] int v47; // [esp+5Ch] [ebp+4h] int v48; // [esp+60h] [ebp+8h] v6 = a1; v7 = a1 & 0xF; v8 = a2; if ( !a5 ) { v24 = a4 - a1; v25 = a1 - a3; v43 = a4 - v6; if ( v7 >= v25 ) v7 = v25; v47 = a4 - v7; v26 = v6 - v7; v27 = v7 + 1; v48 = v27; if ( !v8 ) return v27; v28 = 4 * v24; if ( (4 * v24) > 0x40 ) v28 = 64; v45 = v27 + v26; v29 = (v27 + v26) & 0xF; memmove(Dst, (v8 + 4 * v29), v28); v30 = 4 * v27; if ( (4 * v27) > 0x40 ) v30 = 64; v31 = v26 & 0xF; memmove((v8 + 4 * (v47 & 0xF)), (v8 + 4 * v31), v30); v32 = 4 * v43; if ( (4 * v43) > 0x40 ) v32 = 64; memmove((v8 + 4 * v31), Dst, v32); if ( !a6 ) return v48; v33 = v29; if ( v29 < v29 + v43 ) { v34 = (v8 + 4 * v29 + 214); do { Dst[v33++] = *v34 >> 15; v34 += 2; } while ( v33 < v29 + v43 ); } v35 = (v45 - 1) & 0xF; if ( v35 >= v31 ) { v36 = (v8 + 4 * ((v27 + v47 - 1) & 0xF) + 214); v37 = (v8 + 4 * ((v45 - 1) & 0xF) + 214); v38 = v35 - v31 + 1; do { v39 = *v37 ^ (*v37 ^ *v36) & 0x7FFF; v37 -= 2; *v36 = v39; v36 -= 2; --v38; } while ( v38 ); v27 = v48; } v40 = v31; if ( v31 >= v31 + v43 ) return v27; v41 = (v8 + 4 * v31 + 214); do { *v41 = *v41 & 0x7FFF | (LOWORD(Dst[v40++]) << 15); v41 += 2; } while ( v40 < v31 + v43 ); return v27; } v9 = a1 - a4; v10 = a3 - a1; v42 = a1 - a4; v48 = 16 - v7; if ( 16 - v7 >= v10 ) v48 = v10; if ( !v8 ) return v48; v11 = 4 * v9; if ( (4 * v9) > 0x40 ) v11 = 64; v12 = (v8 + 4 * (a4 & 0xF)); v44 = a4 & 0xF; memmove(Dst, v12, v11); v13 = 4 * v48; if ( (4 * v48) > 0x40 ) v13 = 64; memmove(v12, (v8 + 4 * v7), v13); v14 = 4 * v42; if ( (4 * v42) > 0x40 ) v14 = 64; memmove((v8 + 4 * ((a4 + v48) & 0xF)), Dst, v14); if ( !a6 ) return v48; v15 = a4 & 0xF; if ( v44 < v44 + v42 ) { v16 = (v8 + 4 * v44 + 214); do { Dst[v15++] = *v16 >> 15; v16 += 2; } while ( v15 < v44 + v42 ); } if ( v7 < v48 + v7 ) { v17 = (v8 + 4 * v7 + 214); v18 = v12 + 107; v19 = v48; do { v20 = *v17 ^ (*v17 ^ *v18) & 0x7FFF; v17 += 2; *v18 = v20; v18 += 2; --v19; } while ( v19 ); } v21 = a4 & 0xF; if ( v44 >= v44 + v42 ) return v48; v22 = (v8 + 4 * (v44 + v48) + 214); do { *v22 = *v22 & 0x7FFF | (LOWORD(Dst[v21++]) << 15); v22 += 2; } while ( v21 < v44 + v42 ); return v48; } 

ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ููŠ ุงู„ู…ุธู‡ุฑ ุŒ ูŠู…ูƒู†ูƒ ุฃู† ุชูู‡ู… ุชู‚ุฑูŠุจู‹ุง ู…ุง ูŠุญุฏุซ ู‡ู†ุงูƒ ุŒ ูˆุงู„ุจุงู‚ูŠ ูŠู†ุชู‡ูŠ ุจุนู„ุงู…ุงุช ุบูŠุฑ ู…ุจุงุดุฑุฉ.
ู†ุญู† ู†ุญุงูˆู„ ุชุญุฏูŠุฏ ู‡ุฐู‡ ุงู„ู…ูŠุฒุงุช ุบูŠุฑ ุงู„ู…ุจุงุดุฑุฉ. ุฃูˆู„ุงู‹ ุŒ ู‚ู… ุจุชุนูŠูŠู† ุงุฑุชูุงุน ุงู„ุตููˆู ู…ู† 16 ุฅู„ู‰ 64 ุดุงู…ู„ุงู‹ ุจุชุฑุชูŠุจ ุนุดูˆุงุฆูŠ. ุซู… ุŒ ุฃู…ุงู… ุงู„ุตู ุชุญุช ุงู„ูู‡ุฑุณ 39 ุŒ ุฃุฏุฎู„ ุตูู‹ุง ุฌุฏูŠุฏู‹ุง. ุณูŠู‚ูˆู… ุงู„ุตู ุงู„ุฌุฏูŠุฏ ุจู†ุณุฎ ุงุฑุชูุงุน ุงู„ุตู 38.
ุฏุนูˆู†ุง ู†ู„ู‚ูŠ ู†ุธุฑุฉ ุนู„ู‰ ุงู„ู…ุนู„ูˆู…ุงุช ููŠ ู…ุฌู…ูˆุนุงุช ุงู„ู…ุณู„ุณู„ ู‚ุจู„ ูˆุจุนุฏ ุฅุถุงูุฉ ุณู„ุณู„ุฉ ุŒ ุณู„ุทุช ุงู„ุถูˆุก ุนู„ู‰ ุงู„ุงุฎุชู„ุงูุงุช ุงู„ุฌุฑูŠุฆุฉ:


ู‚ุจู„ ุฅุถุงูุฉ ุตูุจุนุฏ ุฅุถุงูุฉ ุตู
ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:
0E ุŒ 04 ุŒ 07 ุŒ 00 ุŒ 05 ุŒ 0A ุŒ 09 ุŒ 0F ุŒ 03 ุŒ 06 ุŒ 08 ุŒ 0D ุŒ 01 ุŒ 0B ุŒ 0C ุŒ 020E ุŒ 04 ุŒ 07 ุŒ 00 ุŒ 05 ุŒ 0A ุŒ 09 ุŒ 0F ุŒ 03 ุŒ 06 ุŒ 08 ุŒ 0D ุŒ 01 ุŒ 0B ุŒ 0C ุŒ 02
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:
05 ุŒ 2B ุŒ 35 ุŒ 45 ุŒ 4B ุŒ 50 ุŒ 5B ุŒ 6B ุŒ 7B ุŒ 8B ุŒ A5 ุŒ AB ุŒ B0 ุŒ B5 ุŒ E0 ุŒ 10005 ุŒ 2B ุŒ 35 ุŒ 45 ุŒ 4B ุŒ 50 ุŒ 5B ุŒ 6B ุŒ 7B ุŒ 8B ุŒ A5 ุŒ AB ุŒ B0 ุŒ B5 ุŒ E0 ุŒ 100
ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:
06ุŒ 02ุŒ 0EุŒ 09ุŒ 01ุŒ 07ุŒ 0FุŒ 0C ุŒ 00ุŒ 0AุŒ 04ุŒ 0BุŒ 03ุŒ 08ุŒ 0DุŒ 0506ุŒ 02ุŒ 0EุŒ 09ุŒ 01ุŒ 07ุŒ 0FุŒ 05ุŒ 0C ุŒ 00ุŒ 0AุŒ 04ุŒ 0BุŒ 03ุŒ 08ุŒ 0D
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:
10 ุŒ 15 ุŒ 20 ุŒ 25 ุŒ 30 ุŒ 75 ุŒ 85 ุŒ 90 ุŒ 9B ุŒ A0 ุŒ C5 ุŒ CB ุŒ D0 ุŒ D5 ุŒ E5 ุŒ F010 ุŒ 15 ุŒ 20 ุŒ 25 ุŒ 30 ุŒ F0 ุŒ 85 ุŒ 90 ุŒ 9B ุŒ A0 ุŒ C5 ุŒ CB ุŒ D0 ุŒ D5 ุŒ E5 ุŒ F0
ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:
0C ุŒ 08 ุŒ 0E ุŒ 07 ุŒ 0A ุŒ 01 ุŒ 06 ุŒ 0F ุŒ 09 ุŒ 0D ุŒ 00 ุŒ 05 ุŒ 0B ุŒ 02 ุŒ 04 ุŒ 0303 ุŒ 0CุŒ 08ุŒ 0EุŒ 07ุŒ 0AุŒ 01ุŒ 06ุŒ 0FุŒ 09ุŒ 0DุŒ 00ุŒ 05ุŒ 0BุŒ 02ุŒ 04
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:
0B ุŒ 1B ุŒ 3B ุŒ 40 ุŒ 55 ุŒ 60 ุŒ 65 ุŒ 70 ุŒ 80 ุŒ 95 ุŒ BB ุŒ C0 ุŒ DB ุŒ EB ุŒ F5 ุŒ FB0B ุŒ 1B ุŒ 3B ุŒ 75 ุŒ 55 ุŒ 60 ุŒ 65 ุŒ 70 ุŒ 80 ุŒ 95 ุŒ BB ุŒ C0 ุŒ DB ุŒ EB ุŒ F5 ุŒ FB
ุงู„ุฅุฒุงุญุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:ุงู„ุฅุฒุงุญุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:
_00
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:
_40

ู‡ุฐุง ู…ุง ูƒุงู† ู…ุชูˆู‚ุนู‹ุง: ูŠุฏุฑุฌ Excel ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ ุตูู‹ุง ุฌุฏูŠุฏู‹ุง ุจู‡ ุงู„ูู‡ุฑุณ 7 (39 & 0xF) ุŒ ุงู„ุฐูŠ ูŠูƒูˆู† ุฅุฒุงุญุชู‡ 0x05 ุŒ ุจู†ุณุฎ ุงุฑุชูุงุน ุงู„ุตู ููŠ ุงู„ูู‡ุฑุณ 6 ุŒ ุจูŠู†ู…ุง ูŠุชู… ุฏูุน ุงู„ุตู ุงู„ุฃุฎูŠุฑ ุŒ ุงู„ุฐูŠ ุชู… ุฅุฒุงุญุชู‡ 05 ุŒ ุฅู„ู‰ ุงู„ุชุงู„ูŠ ุงู„ู…ุฌู…ูˆุนุฉ ุŒ ูˆู…ู† ู‡ู†ุงูƒ ูŠุชู… ุฏูุน ุงู„ุตู ุงู„ุฃุฎูŠุฑ ููŠ ุงู„ุตู ุงู„ุฑุงุจุน ุŒ ุงู„ุฎ


ุงู„ุขู† ุฏุนูˆู†ุง ู†ุฑู‰ ู…ุง ูŠุญุฏุซ ุฅุฐุง ู‚ู…ุช ุจุญุฐู ุงู„ุตู 29.


ู‚ุจู„ ุฅุฒุงู„ุฉ ุงู„ุตูุจุนุฏ ุฅุฒุงู„ุฉ ุงู„ุตู
ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:
0E ุŒ 04 ุŒ 07 ุŒ 00 ุŒ 05 ุŒ 0A ุŒ 09 ุŒ 0F ุŒ 03 ุŒ 06 ุŒ 08 ุŒ 0D ุŒ 01 ุŒ 0B ุŒ 0C ุŒ 020E ุŒ 04 ุŒ 07 ุŒ 00 ุŒ 05 ุŒ 0A ุŒ 09 ุŒ 0F ุŒ 03 ุŒ 06 ุŒ 08 ุŒ 0D ุŒ 01 ุŒ 0C ุŒ 02 ุŒ 0B
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฃูˆู„ู‰:
05 ุŒ 2B ุŒ 35 ุŒ 45 ุŒ 4B ุŒ 50 ุŒ 5B ุŒ 6B ุŒ 7B ุŒ 8B ุŒ A5 ุŒ AB ุŒ B0 ุŒ B5 ุŒ E0 ุŒ 10005 ุŒ 2B ุŒ 35 ุŒ 45 ุŒ 4B ุŒ 50 ุŒ 5B ุŒ 6B ุŒ 7B ุŒ 8B ุŒ A5 ุŒ 85 ุŒ B0 ุŒ B5 ุŒ E0 ุŒ 100
ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:
06 ุŒ 02ุŒ 0EุŒ 09ุŒ 01ุŒ 07ุŒ 0FุŒ 05ุŒ 0CุŒ 00ุŒ 0AุŒ 04ุŒ 0BุŒ 03ุŒ 08ุŒ 0D02ุŒ 0EุŒ 09ุŒ 01ุŒ 07ุŒ 0FุŒ 05ุŒ 0CุŒ 00ุŒ 0AุŒ 04ุŒ 0BุŒ 03ุŒ 08ุŒ 0DุŒ 06
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู†ูŠุฉ:
10 ุŒ 15 ุŒ 20 ุŒ 25 ุŒ 30 ุŒ F0 ุŒ 85 ุŒ 90 ุŒ 9B ุŒ A0 ุŒ C5 ุŒ CB ุŒ D0 ุŒ D5 ุŒ E5 ุŒ F010 ุŒ 15 ุŒ 20 ุŒ 25 ุŒ 30 ุŒ F0 ุŒ 75 ุŒ 90 ุŒ 9B ุŒ A0 ุŒ C5 ุŒ CB ุŒ D0 ุŒ D5 ุŒ E5 ุŒ F0
ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:ุงู„ู†ุฒูˆุญ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:
03 ุŒ 0CุŒ 08ุŒ 0EุŒ 07ุŒ 0AุŒ 01ุŒ 06ุŒ 0FุŒ 09ุŒ 0DุŒ 00ุŒ 05ุŒ 0BุŒ 02ุŒ 040C ุŒ 08 ุŒ 0E ุŒ 07 ุŒ 0A ุŒ 01 ุŒ 06 ุŒ 0F ุŒ 09 ุŒ 0D ุŒ 00 ุŒ 05 ุŒ 0B ุŒ 02 ุŒ 04 ุŒ 03
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุซุงู„ุซุฉ:
0B ุŒ 1B ุŒ 3B ุŒ 75 ุŒ 55 ุŒ 60 ุŒ 65 ุŒ 70 ุŒ 80 ุŒ 95 ุŒ BB ุŒ C0 ุŒ DB ุŒ EB ุŒ F5 ุŒ FB0B ุŒ 1B ุŒ 3B ุŒ 40 ุŒ 55 ุŒ 60 ุŒ 65 ุŒ 70 ุŒ 80 ุŒ 95 ุŒ BB ุŒ C0 ุŒ DB ุŒ EB ุŒ F5 ุŒ FB
ุงู„ุฅุฒุงุญุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:ุงู„ุฅุฒุงุญุฉ ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:
0000
ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:ู‚ูŠู… ุงุฑุชูุงุนุงุช ุงู„ุตููˆู ููŠ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ:
4050

ู…ู† ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ุนู†ุฏ ุญุฐู ุตู ุŒ ุชุญุฏุซ ุนู…ู„ูŠุงุช ุนูƒุณูŠุฉ. ููŠ ู‡ุฐู‡ ุงู„ุญุงู„ุฉ ุŒ ุชุณุชู…ุฑ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุฑุงุจุนุฉ ููŠ ุงู„ูˆุฌูˆุฏ ูˆุชู…ู„ุฃ ู‚ูŠู…ุฉ ุงุฑุชูุงุน ุงู„ุตู ู‡ู†ุงูƒ ุจุงู„ุงุฑุชูุงุน ุงู„ู‚ูŠุงุณูŠ ู…ุน ุงู„ุนู„ุงู…ุฉ ุงู„ู…ู‚ุงุจู„ุฉ - 0x8005.


ู‡ุฐู‡ ุงู„ุจูŠุงู†ุงุช ูƒุงููŠุฉ ู„ุฅู†ุชุงุฌ ู‡ุฐู‡ ุงู„ุฎูˆุงุฑุฒู…ูŠุฉ ููŠ C #:


ุงู†ุฏุฑูˆ
 public static void InsertRow(SheetLayoutInfo sheetLayoutInfo, int rowIndex) { if (rowIndex >= sheetLayoutInfo.MaxRowIndexNonDefault) return; RowHeightInfo etalonRowHeightInfo = GetRowHeightCore(sheetLayoutInfo, rowIndex); RowHeightInfo newRowHeightInfo = etalonRowHeightInfo != null ? etalonRowHeightInfo.Clone() : CreateDefaultRowHeight(sheetLayoutInfo); int realGroupIndex = (rowIndex + 1) >> 4; int newRowInGroupIndex = (rowIndex + 1) & 0xF; int groupIndex; for (groupIndex = realGroupIndex + sheetLayoutInfo.GroupIndexDelta; groupIndex < sheetLayoutInfo.RowsGroups.Count; groupIndex++, newRowInGroupIndex = 0) { if (groupIndex < 0) continue; if (groupIndex == SheetLayoutInfo.MaxGroupsCount) break; RowsGroupInfo rowsGroupInfo = sheetLayoutInfo.RowsGroups[groupIndex]; if (rowsGroupInfo == null) { if ((newRowHeightInfo.Flags & CustomHeightMask) == 0) continue; rowsGroupInfo = new RowsGroupInfo(); sheetLayoutInfo.RowsGroups[groupIndex] = rowsGroupInfo; } int rowInfoIndex = rowsGroupInfo.Indices[newRowInGroupIndex]; RowHeightInfo lastRowHeightInGroup; if (rowInfoIndex == -1 || rowsGroupInfo.HeightInfos.Count < SheetLayoutInfo.MaxRowsCountInGroup) { lastRowHeightInGroup = GetRowHeightCore(sheetLayoutInfo, ((groupIndex - sheetLayoutInfo.GroupIndexDelta) << 4) + SheetLayoutInfo.MaxRowsCountInGroup - 1); Array.Copy(rowsGroupInfo.Indices, newRowInGroupIndex, rowsGroupInfo.Indices, newRowInGroupIndex + 1, SheetLayoutInfo.MaxRowsCountInGroup - 1 - newRowInGroupIndex); rowsGroupInfo.HeightInfos.Add(newRowHeightInfo); rowsGroupInfo.Indices[newRowInGroupIndex] = rowsGroupInfo.HeightInfos.Count - 1; } else { int lastIndex = rowsGroupInfo.Indices[SheetLayoutInfo.MaxRowsCountInGroup - 1]; lastRowHeightInGroup = rowsGroupInfo.HeightInfos[lastIndex]; Array.Copy(rowsGroupInfo.Indices, newRowInGroupIndex, rowsGroupInfo.Indices, newRowInGroupIndex + 1, SheetLayoutInfo.MaxRowsCountInGroup - 1 - newRowInGroupIndex); rowsGroupInfo.HeightInfos[lastIndex] = newRowHeightInfo; rowsGroupInfo.Indices[newRowInGroupIndex] = lastIndex; } newRowHeightInfo = lastRowHeightInGroup ?? CreateDefaultRowHeight(sheetLayoutInfo); } if ((newRowHeightInfo.Flags & CustomHeightMask) != 0 && groupIndex != SheetLayoutInfo.MaxGroupsCount) { SetRowHeight(((groupIndex - sheetLayoutInfo.GroupIndexDelta) << 4) + newRowInGroupIndex, newRowHeightInfo.Value, newRowHeightInfo.Flags, sheetLayoutInfo); } else { sheetLayoutInfo.MaxRowIndexNonDefault = Math.Min(sheetLayoutInfo.MaxRowIndexNonDefault + 1, SheetLayoutInfo.MaxRowsCount); } } 

ู…ุฒูŠู„
 public static void RemoveRow(SheetLayoutInfo sheetLayoutInfo, int rowIndex) { if (rowIndex >= sheetLayoutInfo.MaxRowIndexNonDefault) return; int realGroupIndex = rowIndex >> 4; int newRowInGroupIndex = rowIndex & 0xF; int groupIndex; for (groupIndex = realGroupIndex + sheetLayoutInfo.GroupIndexDelta; groupIndex < sheetLayoutInfo.RowsGroups.Count; groupIndex++, newRowInGroupIndex = 0) { if (groupIndex < -1) continue; if (groupIndex == -1) { sheetLayoutInfo.RowsGroups.Insert(0, null); sheetLayoutInfo.GroupIndexDelta++; groupIndex = 0; } if (groupIndex == SheetLayoutInfo.MaxGroupsCount) break; var newRowHeightInfo = groupIndex == SheetLayoutInfo.MaxGroupsCount - 1 ? null : GetRowHeightCore(sheetLayoutInfo, (groupIndex - sheetLayoutInfo.GroupIndexDelta + 1) << 4); RowsGroupInfo rowsGroupInfo = sheetLayoutInfo.RowsGroups[groupIndex]; if (rowsGroupInfo == null) { if (newRowHeightInfo == null || (newRowHeightInfo.Flags & CustomHeightMask) == 0) continue; rowsGroupInfo = new RowsGroupInfo(); sheetLayoutInfo.RowsGroups[groupIndex] = rowsGroupInfo; } if (newRowHeightInfo == null) { newRowHeightInfo = CreateDefaultRowHeight(sheetLayoutInfo); } int rowInfoIndex = rowsGroupInfo.Indices[newRowInGroupIndex]; if (rowInfoIndex == -1) { for (int i = newRowInGroupIndex; i < SheetLayoutInfo.MaxRowsCountInGroup - 1; i++) { rowsGroupInfo.Indices[i] = rowsGroupInfo.Indices[i + 1]; } rowsGroupInfo.HeightInfos.Add(newRowHeightInfo); rowsGroupInfo.Indices[SheetLayoutInfo.MaxRowsCountInGroup - 1] = rowsGroupInfo.HeightInfos.Count - 1; } else { for(int i = newRowInGroupIndex; i < rowsGroupInfo.HeightInfos.Count - 1; i++) { rowsGroupInfo.Indices[i] = rowsGroupInfo.Indices[i + 1]; } rowsGroupInfo.Indices[rowsGroupInfo.HeightInfos.Count - 1] = rowInfoIndex; rowsGroupInfo.HeightInfos[rowInfoIndex] = newRowHeightInfo; } } if(rowIndex <= sheetLayoutInfo.MinRowIndexNonDefault) { sheetLayoutInfo.MinRowIndexNonDefault = Math.Max(sheetLayoutInfo.MinRowIndexNonDefault - 1, 0); } } 

ูŠู…ูƒู†ูƒ ุงู„ุนุซูˆุฑ ุนู„ู‰ ุฌู…ูŠุน ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุฃุนู„ุงู‡ ุนู„ู‰ ุฌูŠุซุจ


ุงู„ุงุณุชู†ุชุงุฌุงุช


ู„ูŠุณุช ู‡ุฐู‡ ู‡ูŠ ุงู„ู…ุฑุฉ ุงู„ุฃูˆู„ู‰ ุงู„ุชูŠ ูŠูุงุฌุฆ ููŠู‡ุง ุฑู…ุฒ Excel ุจุงู„ุญูŠู„ ุงู„ู…ุซูŠุฑุฉ ู„ู„ุงู‡ุชู…ุงู…. ู‡ุฐู‡ ุงู„ู…ุฑุฉ ุงูƒุชุดูุช ูƒูŠู ูŠุฎุฒู† ู…ุนู„ูˆู…ุงุช ุญูˆู„ ู…ุฑุชูุนุงุช ุงู„ุตููˆู. ุฅุฐุง ูƒุงู† ุงู„ู…ุฌุชู…ุน ู…ู‡ุชู…ู‹ุง ุŒ ูุนู†ุฏุฆุฐู ููŠ ุงู„ู…ู‚ุงู„ุฉ ุงู„ุชุงู„ูŠุฉ ุณุฃูˆุถุญ ูƒูŠู ูŠู†ุธุฑ Excel ุฅู„ู‰ ุงุฑุชูุงุน ู†ุทุงู‚ ุงู„ุฎู„ุงูŠุง (ุงู„ู…ูุณุฏ: ูŠูˆุฌุฏ ุดูŠุก ู…ุดุงุจู‡ ู„ุชุญู„ู„ SQRT ุŒ ู„ูƒู† ู„ุณุจุจ ู…ุง ุฏูˆู† ุชุฎุฒูŠู† ุงู„ู…ุจุงู„ุบ ู…ุคู‚ุชู‹ุง) ุŒ ูŠู…ูƒู†ูƒ ุฃู† ุชุฑู‰ ูƒูŠู ูŠู†ุทุจู‚ ุฐู„ูƒ ุนู„ู‰ ุชุบูŠูŠุฑ ุญุฌู… ุงู„ุฃุนุฏุงุฏ ุงู„ุตุญูŠุญุฉ. .

Source: https://habr.com/ru/post/ar435426/


All Articles