最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實現(xiàn)將Excel文件渲染在頁面上

 更新時間:2024年12月26日 11:13:50   作者:?團子?  
這篇文章主要為大家詳細介紹了如何使用Html和JavaScript實現(xiàn)將Excel文件渲染在頁面上,文中的示例代碼講解詳細,有需要的小伙伴可以參考下

1.如果從后端拿到的數(shù)據(jù)是文檔流

// 從后端接口獲取 Excel 文檔流
async function fetchExcelFromBackend() {
    try {
        // 假設后端接口 URL
        const backendApiUrl = `http://local.hct10039.com:18080/recognition/downloadExcel?orderSn=${orderSn}`;
        const response = await fetch(backendApiUrl);
 
        if (!response.ok) {
            throw new Error('Failed to fetch Excel from backend: ' + response.status);
        }
 
        const blob = await response.blob();
        const file = new File([blob], 'filename.xlsx', { type: blob.type });
        loadExcelAndRender(file);
    } catch (error) {
        alert('出錯了:' + error.message);
    }
}
 
// 加載并渲染 Excel
async function loadExcelAndRender(file) {
    try {
        const reader = new FileReader();
        reader.onload = function (e) {
            const data = new Uint8Array(e.target.result);
            const workbook = XLSX.read(data, { type: 'array' });
            const firstSheetName = workbook.SheetNames[0];
            const worksheet = workbook.Sheets[firstSheetName];
            const html = XLSX.utils.sheet_to_html(worksheet, { id: firstSheetName });
            document.getElementById('excelDom').innerHTML = html;
        };
        reader.readAsArrayBuffer(file);
    } catch (error) {
        alert('出錯了:' + error.message);
    }
}
 
// 調用函數(shù)從后端接口獲取并渲染 Excel
fetchExcelFromBackend();

2.如果從后端拿到的是文件的地址

function getFileObjectFromUrl(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'blob'; // 重要:設置響應類型為blob
 
    xhr.onload = function() {
        if (this.status === 200) {
            // 請求成功,this.response包含Blob對象
            var blob = this.response;
            // 創(chuàng)建File對象
            var file = new File([blob], 'filename.xlsx', {type: blob.type});
            // 調用回調函數(shù),傳入File對象
            callback(file);
        } else {
            console.error('Failed to download file:', this.status);
        }
    };
 
    xhr.onerror = function() {
        console.error('Request error');
    };
 
    xhr.send();
}
async function loadExcelAndRender(file) {
    try {
        const reader = new FileReader();
        reader.onload = function (e) {
            const data = new Uint8Array(e.target.result);
            const workbook = XLSX.read(data, { type: 'array' });
            const firstSheetName = workbook.SheetNames[0]; // 獲取第一個sheet的名稱
            const worksheet = workbook.Sheets[firstSheetName];
            const html = XLSX.utils.sheet_to_html(worksheet, {id: firstSheetName}); // 只渲染第一個sheet
            document.getElementById('excelDom').innerHTML = html; // 將HTML渲染到指定的div中
        };
        reader.readAsArrayBuffer(file);
    } catch (error) {
        console.error('Error loading or rendering Excel:', error);
    }
}

3.效果

4.附加功能

放大縮小和拖拽功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>滾動拖拽示例</title>
</head>
<body>
    <div class="excelContent borderLineBlack" style="width: 100%;height: 100%;" style="overflow: auto;">
        <div id="excelDom" style="width: 30%;height: 30vh;background-color: aquamarine;">子盒子</div>
    </div>
    <!-- 引入JavaScript腳本 -->
    <script >
        // 獲取父元素excelContent
const excelContent = document.querySelector('.excelContent.borderLineBlack');
 
// 監(jiān)聽父元素的wheel事件,防止?jié)L動父盒子
excelContent.addEventListener('wheel', function(event) {
    // 判斷事件的目標元素是否為excelDom或其子元素
    if (!excelDom.contains(event.target)) {
        // 如果不是,則阻止默認的滾動行為
        event.preventDefault();
    }
});
 
 
let scale = 1; // 設置初始縮放比例
var excelDom = document.getElementById("excelDom");
let isDragging = false;
let offsetX = 0, offsetY = 0; // 用于記錄拖動時的偏移量
 
// 監(jiān)聽鼠標滾輪事件
excelDom.addEventListener('wheel', function(event) {
    if (event.ctrlKey) {
        event.preventDefault();
        if (event.deltaY < 0) {
            scale += 0.1;
        } else {
            scale -= 0.1;
        }
        scale = Math.max(0.1, scale);
 
        // 更新變換,應用縮放和平移
        excelDom.style.transform = `scale(${scale}) translate(${offsetX}px, ${offsetY}px)`;
    }
});
 
// 監(jiān)聽鼠標按下事件
excelDom.addEventListener('mousedown', function(event) {
    isDragging = true;
    let startX = event.clientX;
    let startY = event.clientY;
 
    // 監(jiān)聽鼠標移動事件,只在拖動時添加
    const mouseMoveHandler = function(event) {
        const dx = event.clientX - startX;
        const dy = event.clientY - startY;
        offsetX += dx;
        offsetY += dy;
 
        // 更新變換,應用平移
        excelDom.style.transform = `scale(${scale}) translate(${offsetX}px, ${offsetY}px)`;
 
        // 重置起始坐標
        startX = event.clientX;
        startY = event.clientY;
    };
 
    // 添加鼠標移動事件監(jiān)聽器
    document.addEventListener('mousemove', mouseMoveHandler);
 
    // 監(jiān)聽鼠標釋放事件,只在拖動時添加
    const mouseUpHandler = function() {
        isDragging = false;
        excelDom.style.cursor = 'auto';
 
        // 移除鼠標移動和釋放事件監(jiān)聽器
        document.removeEventListener('mousemove', mouseMoveHandler);
        document.removeEventListener('mouseup', mouseUpHandler);
    };
 
    // 添加鼠標釋放事件監(jiān)聽器
    document.addEventListener('mouseup', mouseUpHandler);
 
    event.preventDefault();
});
    </script>
</body>
</html>

到此這篇關于JavaScript實現(xiàn)將Excel文件渲染在頁面上的文章就介紹到這了,更多相關JavaScript Excel文件渲染內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JavaScript模擬可展開、拖動與關閉的聊天窗口實例

    JavaScript模擬可展開、拖動與關閉的聊天窗口實例

    這篇文章主要介紹了JavaScript模擬可展開、拖動與關閉的聊天窗口,實例分析了javascript實現(xiàn)可拖動的div層相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • 微信小程序實現(xiàn)彈框效果

    微信小程序實現(xiàn)彈框效果

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)彈框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • javascript:void(0)使用探討

    javascript:void(0)使用探討

    如果想做一個鏈接點擊后不做任何事情,或者響應點擊而完成其他事情一般都是設置屬性href = "#"其實還有比這更好的方法,下面為大家整理了幾種比較常見的解決方法,感興趣的朋友可以參考下
    2013-08-08
  • javascript之bind使用介紹

    javascript之bind使用介紹

    首先apply和call是老生常談的東西,但是對于bind,我愣了下,因為這個詞是jquery中使用頻率很高的一個方法,用來給DOM元素綁定事件用的
    2011-10-10
  • JavaScript實現(xiàn)與使用發(fā)布/訂閱模式詳解

    JavaScript實現(xiàn)與使用發(fā)布/訂閱模式詳解

    這篇文章主要介紹了JavaScript實現(xiàn)與使用發(fā)布/訂閱模式,較為詳細的分析了發(fā)布/訂閱模式的概念、原理并結合實例形式分析了javascript實現(xiàn)與使用發(fā)布/訂閱模式的相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • Document:getElementsByName()使用方法及示例

    Document:getElementsByName()使用方法及示例

    Document:getElementsByName()想必大家對它并不陌生吧,主要是根據(jù)名稱獲取元素,下面是其具體的使用方法及范例,感興趣的朋友不要錯過
    2013-10-10
  • Javascript農歷與公歷相互轉換的簡單實例

    Javascript農歷與公歷相互轉換的簡單實例

    下面小編就為大家?guī)硪黄狫avascript農歷與公歷相互轉換的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • js 判斷控件獲得焦點的示例代碼

    js 判斷控件獲得焦點的示例代碼

    本篇文章主要是對js 判斷控件獲得焦點的示例代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • JS實現(xiàn)轉動隨機數(shù)抽獎特效代碼

    JS實現(xiàn)轉動隨機數(shù)抽獎特效代碼

    這篇文章主要為大家詳細介紹了一款轉動隨機數(shù)抽獎的JS特效代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • javascript中DOM復選框選擇用法實例

    javascript中DOM復選框選擇用法實例

    這篇文章主要介紹了javascript中DOM復選框選擇用法,實例分析了javascript操作復選框實現(xiàn)全選與反選的相關技巧,需要的朋友可以參考下
    2015-05-05

最新評論

郸城县| 中阳县| 当阳市| 萍乡市| 平潭县| 朔州市| 新乡县| 义马市| 南漳县| 富平县| 辽阳县| 湖南省| 武城县| 新邵县| 黑山县| 贵德县| 沿河| 柘城县| 西盟| 两当县| 通海县| 石泉县| 德州市| 高雄市| 明光市| 丰台区| 白沙| 治县。| 河南省| 玉龙| 大邑县| 宜州市| 兴安盟| 六枝特区| 徐州市| 平安县| 青河县| 龙岩市| 万源市| 米林县| 通辽市|