Страницы: 1
RSS
Связи в файле Excel: специфика работы кэша
 
Всем добрый день.

Есть два файла Excel (file_1.xlsx и file_2.xlsx).
В каждом из файлов есть одна связь на внешний файл. Исходя из указанной связи идет расчет в ячейке A1.
Внешний файл для обоих файлов один и тот же. Разница лишь во времени обновления данных (старая и новая версия), т.е. исходник для file_1.xlsx и file_2.xlsx один и тоже, но т.к. делались они в разное время, то и цифра соответственно разная.

Если file_1.xlsx и file_2.xlsx отправить человеку, который не имеет доступа к исходному файлу, он с ними сможет работать без обновления связей.
Но что любопытно. Если человек одновременно откроет  file_1.xlsx и file_2.xlsx, то цифры в обоих файлах сравняются.

Почему такое происходит?

Содержимое \xl\externalLinks\externalLink1.xml в каждом файле свое. Если открывать файлы по одному, то тоже ок - цифры отличаются. Почему же, когда оба файла открыты данные совпадают, будто подключаются к одному кэшу?

Да, можно отключить пересчет формул и "слияния" значений не произойдет. Можно разорвать связь, тем самым преобразовав ее в значения, тогда разумеется значения также зафиксируются.

Но хочется понять принцип работы экселя. Почему он склеивает эти кэши, тогда как файлы совершена разные (хоть и открыты в рамках одного процесса).
 
Цитата
Andrew написал:
Но что любопытно. Если человек одновременно откроет  file_1.xlsx и file_2.xlsx, то цифры в обоих файлах сравняются.
Если в настройках стоит автообновление и файл, на который эти две книги ссылаются, имеется на компьютере, то они и обновятся.
Без источника данные просто возьмутся из кэша.
Здесь мы видим, что эксель хранит результат в случае, если источник будет недоступен ([1] - это индекс ссылки на внешний файл):
Код
<sheetData>
    <row r="1" spans="1:1" x14ac:dyDescent="0.25">
        <c r="A1" s="1">
            <f>'[1]Scenario 6 (zero_min+BigMoves)'!N11</f>
            <v>61177872631.393425</v>
        </c>
    </row>
</sheetData>
Изменено: SuperCat - 19.07.2016 21:21:34
There is no knowledge that is not power
 
SuperCat,

У пользователя автообновление отключено. Доступа к источнику нет.
То, что данные берутся из кэша - это понятно. Но я думал, что для каждого файла свой кэш.

Но получается, что кэш общий на эти два файла.

Т.е. если у меня открыт ТОЛЬКО файл "file_1.xlsx", то значение в ячейке A1 = 61 177 872 631
Если у меня открыт ТОЛЬКО файл "file_2.xlsx", то значение в ячейке A1 = 60 680 563 428
Но если я открою оба файла (и file_1.xlsx и file_2.xlsx), то значение ячейки A1 в обоих файлах у меня станет равно значению из последнего открытого файла. Автообновление при этом отключено, доступа к источнику нет.

Как я и писал выше, помогает только отключение пересчета формул. Тогда ячейки сохраняют свои уникальные значения.
Но почему кэш общий для обоих открытых файлов, вот вопрос? Может это где-то настраивается?
Изменено: Andrew - 21.07.2016 09:34:39
 
Выдержка из википедии
Скрытый текст

Мне кажется, что идентификатор на данные в файле 1 и 2 один и тот-же (поскольку ссылка на один и тот же источник). Поэтому, когда открывается второй файл, кэш файла №1 удаляется, или же, если в кэше остается два идентичных идентификатора - оба файла выбирают данные из первой найденной записи.


Возможно ошибаюсь, но как вариант...
Может кто-то знает наверняка? Было бы интересно узнать
Изменено: Samvel - 22.07.2016 15:34:56
 
Уточните, пожалуйста, формулировку названия темы. Модераторы заменят.
Сейчас название общее
 
vikttur, Название темы, как вариант: Специфика работы кэша в файле эксель

Samvel, Спасибо. Похоже, что действительно так и есть. С той лишь оговоркой, что дело не в связи как таковой, а в том, что второй файл был создан из первого. Поэтому структура их идентична и кэш подгружается из того файла, к-ый открыт в последнюю очередь (вроде как самый "свежий").
Знать бы еще, что это за идентификатор такой, тогда его легко можно было бы заменить в xml-ке (если он не двоичный конечно).
Страницы: 1
Наверх