@@ -393,111 +393,6 @@ export default class VTableSheet {
393393 this . updateSheetMenu ( ) ;
394394 }
395395
396- /**
397- * 从 Excel 文件导入多个 sheet
398- * @param options 导入选项
399- * @returns Promise<{ success: boolean; importedSheets: string[]; message: string }>
400- */
401- async importExcelMultipleSheets ( options ?: {
402- /** 是否清除现有的 sheet(默认 false,追加模式) */
403- clearExisting ?: boolean ;
404- /** 指定要导入的 sheet 索引数组(从0开始),不指定则导入所有 */
405- sheetIndices ?: number [ ] ;
406- /** 导入后是否激活第一个导入的 sheet(默认 true) */
407- activateFirstSheet ?: boolean ;
408- } ) : Promise < { success : boolean ; importedSheets : string [ ] ; message : string } > {
409- try {
410- // 动态导入 ExcelImportPlugin
411- const { ExcelImportPlugin } = await import ( '@visactor/vtable-plugins' ) ;
412-
413- // 创建文件输入对话框
414- const file = await this . _selectExcelFile ( ) ;
415- if ( ! file ) {
416- return {
417- success : false ,
418- importedSheets : [ ] ,
419- message : '未选择文件'
420- } ;
421- }
422-
423- // 使用 ExcelImportPlugin 的静态方法导入多个 sheet
424- const importResult = await ExcelImportPlugin . importExcelMultipleSheets ( file , {
425- sheetIndices : options ?. sheetIndices
426- } ) ;
427-
428- if ( ! importResult . sheets || importResult . sheets . length === 0 ) {
429- return {
430- success : false ,
431- importedSheets : [ ] ,
432- message : 'Excel 文件中没有可导入的工作表'
433- } ;
434- }
435-
436- // 如果需要清除现有的 sheet
437- if ( options ?. clearExisting ) {
438- const existingSheets = this . getAllSheets ( ) ;
439- existingSheets . forEach ( sheet => {
440- if ( sheet . sheetKey ) {
441- this . removeSheet ( sheet . sheetKey ) ;
442- }
443- } ) ;
444- }
445-
446- // 导入的 sheet key 列表
447- const importedSheetKeys : string [ ] = [ ] ;
448-
449- // 为每个导入的 sheet 创建工作表
450- for ( let i = 0 ; i < importResult . sheets . length ; i ++ ) {
451- const sheetData = importResult . sheets [ i ] ;
452-
453- // 确保 sheetKey 唯一
454- let sheetKey = sheetData . sheetKey ;
455- let suffix = 1 ;
456- while ( this . getSheet ( sheetKey ) ) {
457- sheetKey = `${ sheetData . sheetKey } _${ suffix } ` ;
458- suffix ++ ;
459- }
460-
461- // 创建 sheet 定义
462- const sheetDefine : ISheetDefine = {
463- sheetKey : sheetKey ,
464- sheetTitle : sheetData . sheetTitle ,
465- data : sheetData . data as any ,
466- rowCount : Math . max ( sheetData . rowCount , 100 ) , // 至少 100 行
467- columnCount : Math . max ( sheetData . columnCount , 10 ) , // 至少 10 列
468- cellMerge : sheetData . cellMerge ,
469- active : false
470- } ;
471-
472- // 添加 sheet
473- this . addSheet ( sheetDefine ) ;
474- importedSheetKeys . push ( sheetKey ) ;
475- }
476-
477- // 激活第一个导入的 sheet
478- if ( options ?. activateFirstSheet !== false && importedSheetKeys . length > 0 ) {
479- this . activateSheet ( importedSheetKeys [ 0 ] ) ;
480- }
481-
482- showSnackbar ( `成功导入 ${ importedSheetKeys . length } 个工作表` , 2000 ) ;
483-
484- return {
485- success : true ,
486- importedSheets : importedSheetKeys ,
487- message : `成功导入 ${ importedSheetKeys . length } 个工作表`
488- } ;
489- } catch ( error ) {
490- const errorMessage = error instanceof Error ? error . message : '导入失败' ;
491- showSnackbar ( `导入失败: ${ errorMessage } ` , 3000 ) ;
492- console . error ( '导入多个 sheet 失败:' , error ) ;
493- return {
494- success : false ,
495- importedSheets : [ ] ,
496- message : errorMessage
497- } ;
498- }
499- }
500-
501396 /**
502397 * 选择 Excel 文件
503398 * @returns Promise<File | null>
0 commit comments