- 追加された行はこの色です。
- 削除された行はこの色です。
* Excel範囲コピー、SQLPLUS風に貼り付け [#f7edf7ac]
-ページ: [[Macro/投稿]]
-作者: [[ガンジャム]]
-カテゴリー: js
-投稿日: 2006-12-15 (金) 23:39:58
** メッセージ [#mfa2644b]
行バイト長取得に(前略)さんのByteLen()をそのまま利用してます。
#code(javascript){{
//excelPaste.js
//Excel等で表範囲をコピーした際のタブ区切りクリップボードデータをSQLPLU風に整形して挿入
//1行目をヘッダ行として、2行目との間にセパレート行を追加。
//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();
var arrMaxWidth = new Array(), arrHeadLine = new Array(), 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 objSC = new ActiveXObject("ScriptControl");
objSC.Language = "VBScript";
var vbsLen = 'Function ByteLen(ByVal s)\n';
vbsLen += ' ByteLen = 0\n';
vbsLen += ' Dim i\n';
vbsLen += ' For i = 1 To Len(s)\n';
vbsLen += ' Dim c\n';
vbsLen += ' c = Mid(s, i, 1)\n';
vbsLen += ' If c = vbCr Or c = vbLf Then Exit For\n';
vbsLen += ' ByteLen = ByteLen + ByteSize(c)\n';
vbsLen += ' Next\n';
vbsLen += 'End Function\n';
vbsLen += 'Function ByteSize(ByVal c)\n';
vbsLen += ' ByteSize = 0\n';
vbsLen += ' If Len(c) = o Then Exit Function\n';
vbsLen += ' Select Case AscB(MidB(c, 2, 1))\n';
vbsLen += ' Case 0: ByteSize = 1\n';
vbsLen += ' Case 255:\n';
vbsLen += ' Dim kana\n';
vbsLen += ' kana = AscB(MidB(c, 1, 1))\n';
vbsLen += ' If &H61 <= kana And kana <= &H9F Then\n';
vbsLen += ' ByteSize = 1\n';
vbsLen += ' Else\n';
vbsLen += ' ByteSize = 2\n';
vbsLen += ' End If\n';
vbsLen += ' Case Else: ByteSize = 2\n';
vbsLen += ' End Select\n';
vbsLen += 'End Function\n';
objSC.AddCode(vbsLen);
var lineCount = 1;
main();//main
main();
function main() {
var arrSplitLine = getClipbrd();
if (arrSplitLine) {
seprateTab(arrSplitLine);
var insText = setEachLines();
insert_exit(insText);
var insTex = setEachLines();
Editor.InsText(insTex);
}
objSC = null;
}
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]);
arrMaxWidth[i] = objSC.Run("ByteLen", arr[i]);
}
} else {
var ln = new Array();
for (i in arr) {
ln[i] = objExl.Run("LenMbcs", arr[i]);
ln[i] = objSC.Run("ByteLen", 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 colWth = objSC.Run("ByteLen", arrColumn[i]);
if (colWth < arrMaxWidth[i]) {
var strBlank = "";
for (j=0; j < (arrMaxWidth[i] - objExl.Run("LenMbcs", arrColumn[i])); j++) {
for (j=0; j < (arrMaxWidth[i] - colWth); 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