プロが教える店舗&オフィスのセキュリティ対策術

PHPコードをエクセルに張り付けると検索ボックスがでてくる!

プログラムのマニュアル書を作成しています。
エディタでもいいのですがエクセルが検索機能が充実しているので
エクセルやっています。 
しかし!
以下のプログラムの個々のコードですが!
エクセルに以下のプログラム張り付けると なぜか?
ホームページみたいに検索ボックスがでてきてしまいます。
プログラムのコード自体が出てきません?
この場合メモ帳のようにプログラムコード事態を表示するにはにどう
したらできますか?
よろしくお願いいたします。

<?php

/*************** データベース情報等の読み込み ***************/
require_once("data/db_info.php");

/*************** データベースへ接続、データベース選択 ***************/
$s=new PDO("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS);

/*************** タイトル等の表示 ***************/
print <<<eot1
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SQLカフェ 検索のページ</title>
</head>
<body style="background-color:aqua">
<hr>
<div style="font-size:18pt">(検索結果はこちらに)</div>
eot1;

/*************** 検索文字列を取得してタグを削除 ***************/
$se_d=isset($_GET["se"])?htmlspecialchars($_GET["se"]):null;

/*************** 検索文字列($se_d)にデータがあれば検索処理 ***************/
if($se_d<>""){

/*************** 検索のSQL文 テーブルtbj1にtbj0を結合 ***************/
$str=<<<eot2
SELECT tbj1.bang,tbj1.nama,tbj1.mess,tbj0.sure
FROM tbj1
JOIN tbj0
ON
tbj1.guru=tbj0.guru
WHERE tbj1.mess LIKE "%$se_d%"
eot2;

/*************** 検索クエリを実行 ***************/
$re=$s->query($str);
while($kekka=$re->fetch()){
print " $kekka[0] : $kekka[1] : $kekka[2] ( $kekka[3] )";
print "<br><br>";
}
}

/*************** 検索文字列入力用表示、トップへのリンク ***************/
print <<<eot3
<hr>
<div>メッセージに含まれる文字を入力してください!</div>
<form method="GET" action="keizi_search.php">
検索する文字列
<input type="text" name="se">
<div>
<input type="submit" value="検索">
</div>
</form>
<br>
<a href="keizi_top.php">スレッド一覧に戻る</a>
</body>
</html>
eot3;
?>

質問者からの補足コメント

  • うーん・・・

    いまのところ
    図形に張り付けて閲覧しています。
    直に張り付けたいですね

      補足日時:2022/05/08 07:13
  • HAPPY

    皆様ご回答下さいましてありがとうございます。
    手が空き次第試みます。
    しばらくお待ちください。

      補足日時:2022/05/10 05:05

A 回答 (3件)

質問文のコードだと行頭のスペース(インデント)が消去されてますが、


実際のコード(Excelに貼り付ける前)だとインデントがあるのでは?
この場合、HTMLソースなどでも同じですがExcelが勝手にHTML形式に
変換してしまいます。Excelの仕様なので、ひと手間が必要です。

対処法その1
[テキストファイルウィザード]を使用する。
テキストファイルとして用意されているのなら、それをインポート。
https://hamachan.info/win10-excel-text/
ファイルとして用意されていないのなら、コピーをして貼り付け後に
貼り付けオプションで[テキストファイルウィザード]を指定。
https://hamachan.info/win7/office/harituke.html
これなら、インデントを維持したまま取り込めます。

対処法その2
Wordに貼り付け後に貼り付けたものをコピーしてExcelに貼り付け。
この場合には、行頭のインデントが半角スペースでされていると一つの
列ごとに半角スペースがある状態でセルに貼り付けされます。
その1のようなインデントが隣の列になるのとは違います。

対処法その3
質問文にあるコードをコピーして貼り付けすると、一つの列にテキスト
として貼り付けることができていると思います。これを利用することで
対応します。
テキストエディターなどで行頭のインデントを(正規表現などで)削除。
行頭インデントをなくすことでExcelが勝手に変換しなくなるようです。

対処法その4
No.1の回答者さんへのお礼にあるように個別に貼り付けする。
コードが多い場合に作業的に多くなるので手間が増えるので非推奨。

その他として、コードにある<を別記号などに変換して貼り付けする
などの対応もあります。個人的には、その1がお勧め。
    • good
    • 1
この回答へのお礼

ご回答下さいましてありがとうございます。
ご紹介してくだいました。
助かりました^^
https://hamachan.info/win10-excel-text/

参考Excel2019では、Power Query(パワークエリ)が起動するようになっていますが、設定によって[テキストファイルウィザード]で取り込むことも可能です。

で 完全な 一行単位 で貼り付けが簡単にできました。
一度 ファイルを txt の拡張子に戻してから
作業したほうがいいと思います。

お礼日時:2022/05/11 04:21

こんにちは。



> あんまりよろしくありませんでしたので!

#1の方法で上手くいかないですか、、
ご質問文のソースについて、当方は問題なく貼り付けできてます。
どう上手くいかないのでしょう?

ワークシート貼付け時に Excel が HTML を解釈してしまうお節介機能は、私の知る限りオフにできません。
セルへ展開したいとのことなので、VBA による解決案を提示します。


Public Sub Paste_PlainText()
  
  Dim source As String: source = GetTextFromClipboard()
  If Len(source) Then
    Dim buf As Variant: buf = Split(source, vbCrLf)
    ActiveCell.Resize(UBound(buf) + 1).Value = WorksheetFunction.Transpose(buf)
  End If

End Sub

' クリップボードからテキストを取得する
' 要参照設定: Microsoft Forms 2.0 Object Library
'
Private Function GetTextFromClipboard() As String
  
  With CreateObject("Forms.TextBox.1")
    .MultiLine = True
    If .CanPaste Then
      .Paste
      GetTextFromClipboard = .Text
    End If
  End With
  
End Function

' 参考URL
' 初心者備忘録 [[VBA]DataObjectを使ったクリップボード操作が上手くいかない場合の対処法]
' https://www.ka-net.org/blog/?p=7537
    • good
    • 1
この回答へのお礼

ご回答下さいましてありがとうございます。
VBですね!
 これは 試す価値はあると思います。
機会があれば 試したいと思います。
今後ともよろしくお願いいたします。

お礼日時:2022/05/11 04:23
    • good
    • 1
この回答へのお礼

ありがとうございます。
貼り付けオプションですね^^

[貼り付け先の書式に合わせるアイコンを選択する。]
では
 あんまりよろしくありませんでしたので!
いまのところ
セルを5行にして分割して貼り付けたらOKです。
検索もそれなりにできます。
 他 何かいいやり方がありましたら
よろしくお願いいたします。

お礼日時:2022/05/09 05:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!