WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:クリップボードの使用方法について

0:[投稿] やんぼー [2003/01/15 15:58 ][環境:IE6 + Excel2000 無関係]

[Win2kpro + IE6 + Excel2000]
下記のようなスクリプトを組み込み、[DATA COPY]ボタン
のクリックで<table>〜</table>のHTMLをクリップボード
にコピーして、エクセル上に貼り付けられるようにしたい
と考えています。

しかし一つ問題があり、表示されたページ内にてコピー
操作(右クリック→コピー、または[Ctrl]+[c])をした場
合、[DATA COPY]ボタンをクリックした後にエクセル上に
貼り付けても、コピー操作でコピーした文字列になって
しまいます。
(この直後にメモ帳上に貼り付けてみると、
<table>〜</table>のHTMLが張り付きます。
まるで、クリップボード内に複数データが存在し、貼り
付け先のアプリによってデータが選択されているように
見えます。

試しに2ブラウザ上に下記のHTMLを表示させ、それぞれ
別の部分を選択してコピー操作した後、[DATA COPY]ボタ
ンをクリックしてからエクセル上に貼り付けると、それ
ぞれがそれぞれのコピー操作でコピーした文字列になり
ました。[DATA COPY]ボタンが予定通り動かないように
なります。)

[DATA COPY]ボタンのクリックで、必ず<table>〜</table>
のHTMLがクリップボードにコピーされるようにするには
何が足りないのでしょうか?
ご存知の方、よろしくご教授お願い致します。

---------------------------------------------------------------------
<html>
<head>
<script language="JScript">
function copy_to_clipboard() {
    var buf;
    buf=document.getElementById("span01").innerHTML;
    window.clipboardData.setData("Text", buf);
}
</script>
</head>
<body>

<input type="button" value="DATA COPY" onClick="copy_to_clipboard();">

<span id="span01">
<table border=1>
<tr><th>One</th><th>Two</th><th>Three</th></tr>
<tr><td>0101</td><td>0102</td><td>0103</td></tr>
<tr><td>0201</td><td>0202</td><td>0203</td></tr>
<tr><td>0301</td><td>0302</td><td>0303</td></tr>
</table>
</span>

</body>
</html>
---------------------------------------------------------------------


1:[回答] ごだっち [MAIL] [2003/01/15 16:28 ]

エクセルがHTMLを解釈してレイアウト表示しているだけだと思います。

つまり、クリップボードには正常にHTMLデータが保存されている(テキストエディタにペーストされた内容のとおり)ということで、「クリップボードへのコピー」には、問題が無いように思いますよ。

※だからといって、エクセルの設定如何でHTMLデータをレイアウトしないように設定できるのかどうかは不明なのですが...。

考え方として、以下のようにタグを意図的に壊してしまうというのでも良ければ、エクセルでレイアウトされないように出来ますけどね。

この場合だと、コピーされた内容の1文字目と2文字目の間に「*」を挿入することで、<table 〜 を <*table 〜 に書き換えてしまいます。
これで、エクセルはペーストされた内容がHTMLタグだとは認識できませんので、普通の文字データとして表示してくれます。


<script language="JScript">
function copy_to_clipboard() {
   var buf; var buf2;
   buf=document.getElementById("span01").innerHTML;
   buf2=buf.slice(0,1)+"*"+buf.slice(1);
   window.clipboardData.setData("Text", buf2);
}
</script>


2:[回答] ごだっち [MAIL] [2003/01/15 16:47 ]

あ、またやってしまいました。ごめんなさい。

質問の内容を全く理解していない勘違いカキコです。
申し訳ありません。

ご質問の内容・現象を確認できました。
あらためて対処方法について調べてみます。
本当にごめんなさい。


3:[回答] ごだっち [MAIL] [2003/01/15 16:57 ]

【途中報告】

まだ解決ではないのですが、一つ発見しました。

エクセル側でのペースト操作時に、[編集]−[形式を選択してペースト]から「テキスト」を選択すると、正常に(クリップボードの内容と同じ、HTMLデータによるテーブルレイアウトが)表示されました。


4:[回答] やんぼー [2003/01/15 17:01 ]

文章の書き方が悪かったみたいです。ごめんなさい。
整理します。
[やりたいこと]
    >>0のHTMLを表示させ、[DATA COPY]ボタンをクリックすることで、
    <table>〜</table>のHTML(Aとする)をクリップボードにコピーし、
    エクセル上に貼り付けることによって表形式でペーストさせたい。
    確実にこの動作となるようにしたい。
[問題点]
    >>0のHTMLを表示させ、ページ中のどこかの文字列を反転させてコ
    ピー(Bとする)した後に、[DATA COPY]ボタンをクリックし、エク
    セル上に貼り付けた場合、Bが貼り付いてしまう。
    この場合、なぜAではなくBが貼り付いてしまうのでしょうか?
    (メモ帳に貼り付けるとAが貼り付きます)    


5:[回答] ごだっち [MAIL] [2003/01/15 17:10 ]

【消極的回避策】

<body onCopy="return false;">って、右クリックコピー操作を禁止してしまうとか...。

   (自滅モードです>自分)


6:[回答] やんぼー [2003/01/15 17:10 ]

ごだっちさん
ありがとうございます!
素晴らしいです。気づきませんでした。
これをヒントにもう少し考えてみます。


7:[回答] やんぼー [2003/01/15 17:13 ]

あ。
>>6 は、
もちろん>>3 の方です(笑)。


8:[回答] やんぼー [2003/01/15 18:48 ]

ごだっちさん
ありがとうございました。
>>0 を下記のようにして、エクセル出力までを一連の動作に組み込みできました。

---------------------------------------------------------------------
<html>
<head>
<script language="JScript">
function copy_to_clipboard() {
    var buf;
    buf=document.getElementById("span01").innerHTML;
    window.clipboardData.setData("Text", buf);
}
</script>
<script language="VBScript">
// JScriptではPasteSpecialがうまく動かなかったので。
Sub ExcelOut()
    set xl = CreateObject("Excel.Application")
    xl.Visible=True
    xl.WorkBooks.Add()
    set xlwb = xl.WorkBooks(1).WorkSheets(1)
    xlwb.Cells(1,1).PasteSpecial -4104    //-4104:xlAll(すべてを貼り付け)
End Sub
</script>
</head>
<body>

<input type="button" value="DATA COPY" onClick="copy_to_clipboard();ExcelOut()">

<span id="span01">
<table border=1>
<tr><th>One</th><th>Two</th><th>Three</th></tr>
<tr><td>0101</td><td>0102</td><td>0103</td></tr>
<tr><td>0201</td><td>0202</td><td>0203</td></tr>
<tr><td>0301</td><td>0302</td><td>0303</td></tr>
</table>
</span>

</body>
</html>
---------------------------------------------------------------------


9:[完了] やんぼー [2003/01/16 09:07 ]

[完了]でした。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World