- 追加された行はこの色です。
- 削除された行はこの色です。
* Excel範囲コピー、SQLPLUS風に貼り付け [#f7edf7ac]
* カンマorタブ区切りデータを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);
}
}}
http://cid-b4b8259365d2529f.skydrive.live.com/browse.aspx/Public/Sakura%20Editor%20Macro
----
- レイアウトが崩れました。削除してください -- [[ガンジャム]] &new{2006-12-15 (金) 23:48:09};
- ファイルの添付はページ上部の[添付]です。もしくはcodeプラグインを使用して
- VBScriptをこんな力業で読ませなくても,拡張子.wsfなら複数言語の混在が出来たような -- [[げんた]] &new{2006-12-26 (火) 00:57:19};
- wsfファイルで作ってみましたがサクラだとエラーになりました。wsf対応してるのかな? -- [[ガンジャム]] &new{2006-12-26 (火) 15:43:04};
- peakさんのマクロ[[../158]]にある2バイト文字判定関数を利用するとか. -- [[maru]] &new{2006-12-27 (水) 02:32:40};
- peakさんので更新しました -- [[ガンジャム]] &new{2006-12-30 (土) 15:16:18};
- csvでもtsvでも -- [[ガンジャム]] &new{2007-06-26 (火) 22:15:56};
#code(javascript){{
ソーススクリプト
}}
- 投稿後のページ編集や削除,ファイル添付は管理権限なしで実行できます.いろいろ試してください. -- [[mau]] &new{2006-12-16 (土) 01:13:30};
#comment