|
* Excel範囲コピー、SQLPLUS風に貼り付け [#f7edf7ac] -ページ: [[Macro/投稿]] -作者: [[ガンジャム]] -カテゴリー: js -投稿日: 2006-12-15 (金) 23:39:58 ** メッセージ [#mfa2644b] #code(javascript){{ //excelPaste.js //Excel等で表範囲をコピーした際のタブ区切りクリップボードデータをSQLPLU風に整形して挿入 //1行目をヘッダ行として、2行目との間にセパレート行を追加。 //セル結合は無視。セル内改行は半角ブランクに置換。 //http://mixi.jp/view_diary.pl?id=293214702&owner_id=6649650 var arrMaxWidth = new Array(); var arrHeadLine = new Array(); var arrDataLines = new Array(); //bytelength関数 var stdModule = 1; var func = "Function LenMbcs(ByVal str as String)\r\n" + "LenMbcs = LenB(StrConv(str, vbFromUnicode))\r\n" + "End Function\r\n"; var objExl = new ActiveXObject('Excel.Application'); var objBok = objExl.Workbooks.Add(); var objMod = objBok.VBProject.VBComponents.Add(stdModule); objMod.codemodule.addfromstring(func); var lineCount = 1; main();//main function main() { var arrSplitLine = getClipbrd(); if (arrSplitLine) { seprateTab(arrSplitLine); var insText = setEachLines(); insert_exit(insText); } } function getClipbrd() { var ie = new ActiveXObject("InternetExplorer.Application"); ie.Navigate("about:blank"); var clip = ie.Document.parentWindow.clipboardData.getData("Text"); ie = null; if (clip) { return(clip.split("\r\n")); } else { return(false); } } function seprateTab(arr) { var re = /\n/g; for (i in arr) { var strLine = arr[i]; if (strLine) { strLine = strLine.replace(re, " "); splitTab(strLine); } lineCount++; } } function splitTab(str) { if (lineCount == 1) { arrHeadLine = str.split(" "); compareLength(arrHeadLine, 0); } else { var dataLine = str.split(" "); compareLength(dataLine, 1); arrDataLines[lineCount] = dataLine; } } function compareLength(arr, f) { if (f == 0) { for (i in arr) { arrMaxWidth[i] = objExl.Run("LenMbcs", arr[i]); } } else { var ln = new Array(); for (i in arr) { ln[i] = objExl.Run("LenMbcs", arr[i]); if (arrMaxWidth[i] < ln[i]) { arrMaxWidth[i] = ln[i]; } } } } function setEachLines() { var hline = "", dlines = "", sline = ""; hline = attachWidth(arrHeadLine).join("|") +"\r\n"; for (i in arrDataLines) { dlines += attachWidth(arrDataLines[i]).join("|") +"\r\n"; } sline += setSeprateLine(arrMaxWidth).join("|") +"\r\n"; return(hline + sline + dlines); } function attachWidth(arrColumn) { for (i in arrMaxWidth) { if (objExl.Run("LenMbcs", arrColumn[i]) < arrMaxWidth[i]) { var strBlank = ""; for (j=0; j < (arrMaxWidth[i] - objExl.Run("LenMbcs", arrColumn[i])); j++) { strBlank += " "; } arrColumn[i] += strBlank; } } return(arrColumn); } function setSeprateLine(arrColumn) { var arrDash = new Array(); for (i in arrColumn) { var strDash = ""; for (j=0; j < arrMaxWidth[i]; j++) { strDash += "-"; } arrDash[i] = strDash; } return(arrDash); } function insert_exit(s) { objBok.close(false); objExl.quit(); Editor.InsText(s); } }} ---- - レイアウトが崩れました。削除してください -- [[ガンジャム]] &new{2006-12-15 (金) 23:48:09}; - ファイルの添付はページ上部の[添付]です。もしくはcodeプラグインを使用して #code(javascript){{ ソーススクリプト }} - 投稿後のページ編集や削除,ファイル添付は管理権限なしで実行できます.いろいろ試してください. -- [[mau]] &new{2006-12-16 (土) 01:13:30}; - ありがとうございました。試してみます -- [[ガンジャム]] &new{2006-12-16 (土) 02:06:45}; #comment |