|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Всем привет! Давненько я не просил посмотреть мой диковатый код и вот :) Задачка прилетела, в её рамках понял, что нужен некий генератор. По факту надо не больше 20-30 адресов ячеек сгенерить, можно было тупо список захардкодить, но это ж не наш путь. Сейчас есть косяк, что больше примерно 580 адресов генерируются долго, больше 12 секунд, а уже при 600 примерно 24 секунды, 670 уже 152 секунды. Еще есть ограничение: адреса могут генерироваться только 2-х буквенные, то есть больше чем ZA-Z(фактически ZY это последний возможный адрес) уже не получить. Больше чем 26 * 26 + 26 - 1 не сгенерить, т.е. 701 ячейку еще можно, при 702 уже получим ошибку(java.lang.IndexOutOfBoundsException: Index: 26, Size: 26). А ведь у экселя xlsx 16384 столбцов судя по данным гугла. Как они это делают :) Задача состоит в том, что надо получить список A1, B1, C1, ... AA1, AB1, AC1, ... AAA1, AAB1, AAC1 и т.д. в общем открываем любой эксель и крутим вправо, вот весь нужный список и видно в адресах столбиков. Плюс номер строки добавить, но это не сильно важно. На входе имеем количество необходимых адресов, на выходе лист с этими адресами, ну или массив, не суть. Может я не в ту степь полез, задачу уже закрыл как есть, но интересно стало как улучшить производительность? и получить хотя бы адреса с 3-мя буквами (это, конечно не проблема, нужно просто переписать генерацию префиксов для основного метода, но скорее всего это повлечет изменение кода и во второмметоде). CharUtils2 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.
Пока писал пост, запустил генерацию 701-го адреса, время выполнения 333 сек, последние адреса ячеек: ZW1 [698] ZX1 [699] ZY1 [700] По памяти жрет 385мб по данным VisualVM ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 09:59 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Мне кажется можно переписать без использования коллекций типа List<String> strings ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 10:45 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Nixic, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
алгориитм спер у великого и могучего ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 10:48 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Nixic, проверил ща в экселе, все правильно 701 - ZY 702 - ZZ (если считать что первая кол-ка = 1) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 10:54 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Если заинлайнить getNameFromNumber то можно избавиться от деления и от вычисления остатка. Они - линейно зависимы от парамтера цикла. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 10:57 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
mayton, я ж честно признался, мопед не мой, я с пыха только перевел. В любом случае, я думаю вопрос скорости решен ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 11:01 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Ага. Особенно эта строка радует. Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 11:17 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
artas mayton, я ж честно признался, мопед не мой, я с пыха только перевел. В любом случае, я думаю вопрос скорости решен Реально круто! Я когда гуглил что-то подобное, я искал на java, ничего толком не нашёл и написал свою дичь!)) Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 11:55 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
я уверен что в poi уже есть где-то утилитарный класс, который умеет пересчитывать координаты в excel-нотацию. надо было сразу туда копать. но иногда и самому полезно мозгами пошевелить, не без этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 12:05 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Спасибо всем, особенно artas'у, взял на вооружение (имена переменных еще надо отрефачить будет): CharUtils2 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Последние строчки в консоли: NTN1 NTO1 NTP1 Count addresses:10000 Completed for 74.0 ms ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 12:53 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
Рефачь. Возми курс на экономию ресурсов памяти. Твоей утилите полезно освоить Stream-able подход к генерации информации. Тем более что современный Java API уже к этому располагает. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 12:57 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
chpasha, вы правы Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 13:08 |
|
Генератор адресов ячеек Excel, улучшайзинг :)
|
|||
---|---|---|---|
#18+
chpasha, brw, их реализация Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 13:11 |
|
|
start [/forum/topic.php?fid=59&msg=39961652&tid=2120798]: |
0ms |
get settings: |
24ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
377ms |
get tp. blocked users: |
2ms |
others: | 341ms |
total: | 832ms |
0 / 0 |