Что такое хорошая веб-Сетка, которая принимает данные буфера обмена Excel?

Я заметил, что Internet Explorer 11 становится невероятно медленным, когда вырезаете данные, подобные jeremy. Это верно для Chrome, но у IE возникает проблема при передаче разрезанных данных в Blob-Constructor. На моей машине, передавая 5 МБ данных, происходит сбой в IE, а потребление памяти идет через крышу. Chrome быстро создает blob.

Запустите этот код для сравнения:

var byteArrays = [],
    megaBytes = 2,
    byteArray = new Uint8Array(megaBytes*1024*1024),
    block,
    blobSlowOnIE, blobFastOnIE,
    i;

for (i = 0; i < (megaBytes*1024); i++) {
    block = new Uint8Array(1024);
    byteArrays.push(block);
}

//debugger;

console.profile("No Slices");
blobSlowOnIE = new Blob(byteArrays,  { type: 'text/plain' });
console.profileEnd();

console.profile("Slices");
blobFastOnIE = new Blob([byteArray],  { type: 'text/plain' });
console.profileEnd();

Поэтому я решил включить оба метода, описанные jeremy в одну функцию. Кредиты идут к нему за это.

function base64toBlob(base64Data, contentType, sliceSize) {

    var byteCharacters,
        byteArray,
        byteNumbers,
        blobData,
        blob;

    contentType = contentType || '';

    byteCharacters = atob(base64Data);

    // Get blob data sliced or not
    blobData = sliceSize ? getBlobDataSliced() : getBlobDataAtOnce();

    blob = new Blob(blobData, { type: contentType });

    return blob;


    /*
     * Get blob data in one slice.
     * => Fast in IE on new Blob(...)
     */
    function getBlobDataAtOnce() {
        byteNumbers = new Array(byteCharacters.length);

        for (var i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }

        byteArray = new Uint8Array(byteNumbers);

        return [byteArray];
    }

    /*
     * Get blob data in multiple slices.
     * => Slow in IE on new Blob(...)
     */
    function getBlobDataSliced() {

        var slice,
            byteArrays = [];

        for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
            slice = byteCharacters.slice(offset, offset + sliceSize);

            byteNumbers = new Array(slice.length);

            for (var i = 0; i < slice.length; i++) {
                byteNumbers[i] = slice.charCodeAt(i);
            }

            byteArray = new Uint8Array(byteNumbers);

            // Add slice
            byteArrays.push(byteArray);
        }

        return byteArrays;
    }
}
8
задан Bill the Lizard 17 October 2012 в 11:06
поделиться

5 ответов

Я в настоящее время использую dhtmlxGrid, и у нас есть Excel скопировать/вставить работа функциональности. dhtmlXGrid является самым полнофункциональным пакетом сетки JavaScript, который я нашел.

На их веб-сайте dhtmlXGrid утверждает, что поддерживал функциональность Буфера обмена в Профессиональной версии. (Однако я заметил, что Образец на их сайте не работает над моим Firefox.Править: Это - вероятно, проблема полномочий, которую упомянул Nathan.)

В любом случае мы должны были сделать некоторую дополнительную работу для получения точной копии Excel и функциональности вставки, которую мы хотели. Мы по существу должны были переопределить часть их функциональности для получения желаемого поведения. Их поддержка была довольно хороша в помощи нам предложить решение.

Таким образом для ответа на вопрос необходимо смочь заставить их поддерживать копию и вставку при покупке Профессиональной версии. Я просто предупреждаю Вас, что может потребоваться некоторая дополнительная работа для точной настройки того поведения.

В целом, я доволен dhtmlXGrid. Мы используем много их функций. Их поддержка довольно хороша. Они обычно занимают один день для ответа, так как они находятся в Европе (я думаю). И JavaScript его самым открытым исходным кодом природы, таким образом, я могу всегда погружаться в то, когда я должен.

3
ответ дан 5 December 2019 в 22:21
поделиться

Не ответ, а предупреждение: моя компания купила Infragistics 2007 года средства управления ASP.NET только для Сетки, и мы сожалеем о том выборе.

Качество API ужасно (по нашему мнению, по крайней мере), делая его очень трудно к программе против сетки (например, непоследовательные соглашения о присвоении имен, но это - просто неудобство, у нас есть жалобы на объектную модель также).

Таким образом, я не могу сказать, что знаю о более оптимальном варианте, я просто знаю, что дам попытку чему-то еще прежде, чем заплатить за продукты Infragistics снова (и почтовая поддержка, которую мы получили, было ужасно также).

3
ответ дан 5 December 2019 в 22:21
поделиться

Я боролся с этой проблемой несколько лет назад (2004, я думаю). Мы столкнулись с проблемой, что Firefox не позволяет сценариям читать буфер обмена по умолчанию (но можно предоставить доступ к буферу обмена).

Существуют другие способы считать данные буфера обмена также... Flash, например, может считать буфер обмена. Существует хорошая статья о ajaxian, чтобы объяснить, как делают к этому негласно.

В конце мы не могли найти веб-Сетку, которые отвечают всем требованиям, таким образом, мы должны были создать наше собственное в смеси Actionscript и JavaScript.

0
ответ дан 5 December 2019 в 22:21
поделиться

Я не хотел бы быть Captain Obvious здесь..., но что относительно простой.NET управление Gridview? Можно скопировать данные Excel в него и из него..., и можно выполнить его в любой системе с установленной платформой.NET.

0
ответ дан 5 December 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: