PC&WEB

2012年5月10日 (木)

[Excel2007または2010]挿入機能がグレー表示/画像が貼り付けできない

お久しぶりの更新。
前にも引っかかったことがあったのに覚えてなかったので、今回はちゃんとメモすることにしました…。

今回の問題は、Excel2010で挿入タブにある昨日のほとんどがグレー表示で、
画像やオートシェイプの貼り付けができないというもの。
よく見たら、保存してあるはずのオートシェイプまで消えている・・・なんで?

まずは、保護シート設定や、共有設定にしているかどうかを疑ってみたけれど、どれも違う。
じゃあなんだ?と、途方に暮れてたんだけど、やっと解決策が載ってるところを発見。

【excel2007or2010の挿入タブがグレー表示】
http://answers.microsoft.com/ja-jp/office/forum/office_2007-excel/excel2007or2010%E3%81%AE%E6%8C%BF%E5%85%A5/352bc857-de59-e011-8dfc-68b599b31bf5?msgId=a7e7274f-755a-e011-8dfc-68b599b31bf5

【Excel2010で挿入タブの一部がグレーアウト】
http://irumi.sblo.jp/article/43761090.html

上記のサイトに解決法が載ってた!助かりました。ありがとうございます。

■、挿入タブを使えるようにして、消えていた画像を表示させるには…
1. [ファイル] タブの [オプション] をクリックし、[Excel のオプション] を開く
2. [詳細設定] をクリックし、[次のブックで作業するときの表示設定] の項目まで下にスクロール
3. [オブジェクトの表示] の [すべて] にチェックをし、[OK] ボタンをクリック

これで、挿入機能がまた使えるようになったし、消えてた画像も見えるようになった!よかったよかった。

でも、なんで詳細設定が変わったのかなーと思ってたら、その原因もちゃんと書いてあった。
キーボードの[Ctrl]+[6]で表示の切替になるようで、
[Ctrl]+[5]の取り消し線ショートカットキーを使ってた時に誤操作してしまったらしい。
これは気をつけないとあかんなー。

2012年2月23日 (木)

[ASP.NET]IEのファイルダウンロードダイアログの「開く」ボタンを非表示にする方法

またまた、お客さんから。
『ダウンロードするときに「開く」を押して間違ってXボタンを押しちゃうのをどうにかしたい!』
とのこと。
しかもたまたまそこのダウンロードの機能だけ、ダウンロード時にフラグを更新してしまって
1回きりしかダウンロードできない仕様なので、
「開く」→ファイルのXボタンを押すともう2度と出てこなくなるんだよね…。
(Temporary Internet Filesを探してもらうのも大変だし。。。)

というわけで、ダウンロードファイルは「保存」しか使えないようにしましょうと提案。


これは下記のサイトを参考にさせていただきました。

ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ niyoな日記
http://niyodiary.cocolog-nifty.com/blog/2009/09/aspnetcie-b7f4.html

ボタンを消せることにも驚いたけど、いろんな方法があるのね。
(参考にしたサイトでは3種類の方法がありました)


私はヘッダのmetaタグに設定する方法にしました。

<meta id="metaDownloadOptions" runat="server" name="DownloadOptions" content="noopen" />
※サーバー側で設定をいじることがなければ、「runat="server"」は不要。

この1行を追加すると、
見事にダウンロードダイアログから「開く」ボタンが消えたので、一件落着!

2012年2月22日 (水)

[ASP.NET][AjaxControlToolkit][Javascript]NumericUpDownExtender操作時のイベント

テキストボックスにAjaxControlToolkitのNumericUpDownExtenderを付けて、数値を1ずつ増減できるのを付けたのだけど、
お客様からの要望で、

1.1〜9は"01"〜"09"に。
2.UpDownする度に、ほかのコントロールを操作したい。

そしてこれをサーバー側ではなく、クライアント側で処理してほしい、
つまりJavacsriptで実現してほしいということになった。

NumericUpDownExtenderにUpDownする時のイベントがあれば簡単だなーと思っていたら、
そんなものは用意されてなかった。。。(私が見つけられなっただけかもしれないけど…)

仕方がないので、TextBox.Attributes["onchange"]に(<input type="text" onchange="・・・" />のこと)
関数を書くことにした。

下に、テキストボックスと最小値とチェックボックスのIDを渡し、
最小値以上の数値が入力された場合はチェックボックスにチェックを入れるという関数を書いてみた。
-------------------------------------------------
function txtChange(obj, min,chkid){
    var e = obj;//テキストボックス
    var i = parseInt(e.value);
    var chk = document.getElementById(chkid);

    if(i < 10){
        e.value = "0" + String(i);
    }
    if(i > min && !chk.checked){
        chk.checked = true;
    else{
        chk.checked = false;
    }
}
------------------------------------------------
これで1.と2.の実現ができた。

しかし、問題が…。
このチェックボックスが曲者で、UpDownの操作が無くても手動で設定できる仕様だったので、
初期ロード時にDBから値をセットした時や、
何かの操作でPostBackが発生してしまう時にもこのtxtChange関数が動いてしまって、
手動で設定した内容が消えてしまうのだ。
(例:最小値2に設定し、テキストボックスには4と入力したが、チェックボックスのチェックは手動で外した場合、
PostBackが発生すると、またチェックがついてしまう。)

NumericUpDownを操作するときだけ、
つまり、サーバー側の操作でテキストボックスの値が変えられる時以外で上の関数を呼び出したいんだけどなぁ。

ちょっと悩んだけど、Page_Load「以外」がわかればいいので、
Javascriptのwindow.onloadを使えばいいんじゃないか!とひらめいた。

というわけで、ページロードがされたかどうかを判断するフラグを置いて、ロード時に"1"を立てるようにした。
--------------------------------------------
<input type="hidden" id="OnLoadFlg" 〜/>を設置。
======================
window.onload = function(){
    document.getElementById("OnLoadFlg").value = "1";//ページロードされた場合1を立てる
}
function txtChange(obj, min,chkid){
    var e = obj;//テキストボックス
    var i = parseInt(e.value);
    var chk = document.getElementById(chkid);
    var onLoadFlg = document.getElementById("OnLoadFlg");

    if(i < 10){
        e.value = "0" + String(i);
    }
    //ページロード時以外の場合にチェックの処理
    if(onLoadFlg.value == "0"){
        if(i > min && !chk.checked){
            chk.checked = true;
        else{
            chk.checked = false;
        }
    }
    onLoadFlg.value = "0";//フラグを元に戻す
}
------------------------------------------------

ちょっと不細工だけど、これで思ったような処理ができた。
もっとスマートな方法があれば教えてください><

2012年2月13日 (月)

[ActiveReports] 環境によって余白やページサイズが変わるのを防ぐには

久々にドツボ。
本番環境と開発環境で、ActiveReportsで作ったPDFのページサイズが違う・・・
クライアントからの問い合わせで発覚。

<開発環境>
Visual Studio2008 C# / ASP.NETのWebアプリ
.NET Framework 2.0
ActiveReports for .NET 3.0J SP3 Version 5.2.1053.1

<ページサイズの違い>
開発環境:222.2mm×296.7mm(※現行システムもこのサイズ
本番環境:222.2mm×279.4mm

なんと2cm弱も違う。
現行システムから、ページ設定は1ミリも変えてないのになぜ…?
最初は、レポートデザインのDetailやPageFooterの縦の長さを変えたらいけるだろうと思ってたら、全然うまくいかず。
余白を2cm削ってみたものの、現行システムと全く同じのレイアウトにならないので微妙…。

ActiveReports for .NET 3.0Jのリリースノートには、

  レポートの作成および表示処理は、ご利用の環境のハードウェア構成等に依存します。
  特定のOS、プリンタ、ドライバなどの組み合わせによって、プレビューや印刷結果が異なったり、一部正しく出力されない場合があります。
ftp://ftp.grapecity.com/trial/ActiveReportsNET/ReleaseNote_5210531.htm

と書いてある。
じゃあ原因は、サーバの環境依存なのかな?
というところまではわかったんだけど、結局どうすれば良いかわからず、藁にもすがる思いで、
先輩に「どーすればいいんですか(>Д<;)」と聞いてみた。

そしたらすんなり、方法を教えてもらえた!さすが先輩(・∀・)
参考URL
http://www.ilovex.co.jp/Division/SRD/archives/2008/03/activereportpdf.html

これと、先輩の送ってくれたコードを元に、
こんな関数を追加してみた。

/// <summary>
/// PDFページ設定
/// </summary>
/// <typeparam name="ReportType">帳票タイプ</typeparam>
/// <param name="rpt">帳票インスタンス</param>
/// <remarks>サーバ環境依存によるページ設定違い回避</remarks>
public static void PdfSetting<reporttype>(DataDynamics.ActiveReports.ActiveReport3 rpt)
where ReportType : DataDynamics.ActiveReports.ActiveReport3
{
    rpt.Document.Printer.PrinterName = "";//プリンタの設定を使用しないようにする
    rpt.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4;
    rpt.PageSettings.PaperWidth = (float)8.27;//inch
    rpt.PageSettings.PaperHeight = (float)11.69;//inch
}

これを帳票インスタンス生成時に

...PdfSetting<reporttype01>(this);

とか書いてやれば、初期化してくれるどの帳票で呼び出しても大丈夫(・∀・)

参考URLの記事は、自分でも調べてたときにヒットして一読してたのに、すっかり見落としてた…
これを読んで必要な情報かどうか判断できるというのは技術と経験の差だわね…
自分の未熟さを実感したので、これからも精進しないと><

2012年1月10日 (火)

[VBA]定義された名前を削除する

何度も使いまわされたExcelファイルには結構ゴミ(既に意味のない定義された名前)がついてることが多々ある。
名前が定義されていると、ファイルサイズが大きくなったり、
前に使っていた人が無意識にサーバ名とか顧客のフォルダ名を登録しててそのままだったりする
(セキュリティ的にもどうなの、、、)
ので、気付いたら消すようにしている。


通常は、

数式>名前の管理
で、不要の名前を選択して削除
(Excel2010)

挿入>名前>定義
で、不要の名前を選択して削除
(Excel2003)

でうまくいくんだけど、Excel2010では
名前リストを全削除したのに、保存時の互換性チェックで

「このブックのいくつかの数式は、現在閉じている他のブックにリンクされています。
 以前のバージョンの Excel では、リンク先のブックを開いていないときにこれらの数式を再計算すると、255 文字を超える部分は返されません。
場所:定義された名前」

というメッセージが表示されてしまう。

そこでVBAに以下のコードを書き込んで実行し、名前を全部消してしまうことにした。
-------------------------------------------------
Sub ClearAllNames()

    Dim objName As Name

    For Each objName In ActiveWorkbook.Names
        objName.Delete
    Next objName

End Sub
-------------------------------------------------

上のコードを実行してから保存すると、上記のメッセージはでなくなった。
実行して、名前の定義が消えていることを確認したら、VBAに追加したコードは削除しておこうね。(そのコードが次にゴミになったりいらんことをしたりするので・・・

2011年12月21日 (水)

[ASP.NET] ValidatorをJavascriptから呼び出す方法

ASP.NETのButtonにOnClientClickを追加して、Javascriptの方で警告文(とある条件の時にメッセージは出すけど処理は続行しますよー的なの)を出すようにしたんだけど、そうするとButtonのValidationGroupに紐付けているValidationControlたちが動かなくなってしまった・・・。

同じように設定しているLinkButtonはうまくいくのになぁ・・・。<a>と<input>違いなのかしら?

動かないのは仕方ない。無理やり入れて動かしてみよう。
さて、検証処理はどこで動いているか。

デバッグ実行すると、Visual Studioのソリューションエクスプローラに「スクリプトドキュメント」というのが現れる。
その下に、「Windows Internet Explorer」>「(表示中のページの動的に作られたソース)」>「ScriptResouce.axd?=1***」がいくつか現れるはずなので、
"var Page_ValidationVer・・・"
で始まるファイルを探そう。
このファイルがValidatiorの検証処理の本体っぽい。

そしてページのHTMLには

var Page_ValidationSummaries
var Page_Validators

というものが作成されているはず。
Page_ValidationSummaries配列にはValidationSummaryが格納され
Page_Validators配列にはページ内のすべてのValidatiorが格納されている模様。
ほほう。

Page_ValidationSummaries、Page_Validatorに格納されている検証オブジェクトを使用して、
ScriptResouce.axd〜内で検証処理を行ってるみたい。

というわけで、ボタンクリックをしたときに警告文(確認)を出し、そのあと確認メッセージを出してから、
検証を行うJavascriptを書いてみた。
ButtonのOnClientClickに以下を記述。

----------------------------------

function checkSave() {
var ret = true;
ret = checkName();//入力欄にある値が入っていない場合は注意喚起のメッセージを出す。confirm('名前が入力されていません。');
if(ret == true) {
var ret2 = confirm('保存しますか?');
if(ret2 == true) {
var result = false;
result = Page_ClientValidate('CheckSave');//ValidationGroup="CheckSave"の検証を行う
return result;
}
else { return false; }
}
else { return false; }
}


----------------------------------
この「Page_ClientValidate('(該当のValidationGroup)');」
は、ScriptResouce.axd〜内にある、ValidationGroupが同一のすべての検証を行う関数。
これを無理やり書き込んだらうまく動くようになった!
はぁ、難しいなー><

【参考】OnClientClickとValidatorの関係
http://d.hatena.ne.jp/manymanytips/20110120/1295505521

ASP.NETのValidatorをjavascriptから呼び出す
http://d.hatena.ne.jp/manymanytips/20110117/1295243420

ASP.NETのValidator理解のための覚え書き
http://mitc.xrea.jp/diary/070

2011年12月20日 (火)

[Visual Studio2008]デバッグ実行が重くて遅い・・・

Visual Studio2008のデバッグ実行が遅すぎてイライラしてきた。
どれだけ遅いかというと、F5を押したあと、トイレに行って帰ってきてもまだ画面が真っ白というありさま。酷い。
(他のマシンではサクサク実行できるのできっと私のマシンがヘボいんだ・・・><)

なんとかならんのかー!!と思って調べてみると2つ改善できる方法があるみたい。

その1:Visual Studio2008のスタートページの更新をしない

「ツール」メニュー>「オプション」でオプション画面を開いて、
「環境」>「スタートアップ」>「スタートアップ時」の設定項目を「空の環境を表示」に。
「コンテンツをダウンロードする間隔」のチェックも外しておこう。
(「空の環境を表示」に設定にするとこれはどっちでもいいのかな?)

【参考】 Visual Studio 2008でデバッグ実行の開始・終了が重い
http://darthddk.blog55.fc2.com/blog-entry-1.html

でも私の場合は改善せず。。。(´・ω・`)Visual Studioの起動は早くなったけど。
じゃあ、これならどうだ!↓


その2:.suoファイル(ソリューション ユーザー オプション)を削除する

ソリューションを閉じてから、該当.slnファイルを作る時に一緒に作られる.suoファイルを削除するといいらしい。
※.suoファイルは隠しファイルになっているのでもし見つからなければフォルダオプションで隠しファイルも見えるように設定しとこう。

見てみると.suoファイルがいつの間にか、数MBの容量になってた・・・。これが原因?
.suoファイルってのは、ソリューションに関連付けられたオプションを記録するファイルなのだけど、
http://msdn.microsoft.com/ja-jp/library/xhkhh4zs(v=vs.90).aspx )
何を設定してたか忘れたので(ぇ)一旦リセットしちゃえ☆ということで、
.suoファイル・.slnファイルを消して、ソリューションファイルを作り直すと、
新たに作成された.suoファイルは数KBに!めっちゃサイズが小さくなってる。
デバッグ実行してみると、前より早くなった!(でもサクサクとまではいかなかった・・・

【参考】 Visual Studio 2008 デバッグモードでプログラムの起動が遅い
http://shimaura.cocolog-nifty.com/blog/2011/06/visual-studio-2.html

てなわけで、上の2つをやってみたら前よりは改善されたのでよしよし。
マシン替えてくれないかなー、お金ないんかなー・・・

[Excel]-画像のコピー

2003では、Shiftキーを押しながら、編集>図のコピー
http://hamachan.info/excel/zu-kopi-.html

2007では、ホーム>貼り付け>図>図としてコピー
http://hamay.blogspot.com/2007/03/blog-post_26.html

2010では、ホーム>コピー>図としてコピー
http://www4.synapse.ne.jp/yone/excel2010/command/clipboard.html

だそうです。
統一してくれよ・・・

2008年7月11日 (金)

移行したよ、eoblog

おぉ、前よりかカスタマイズしやすいし、多機能だ!
使いこなすまでにもうちょっと時間かかりそうだけどcoldsweats01

タイミングが良いのか悪いのか、6月末で今までお世話になってたレンタルサーバが運営停止したので、これからどうしようかと思ってたけど、カスタマイズてきるんならもうこのブログをサイト代わりにしてもいいかな?と思ったり。
今まで(独学だけど)覚えたHTMLやCSSの知識を無駄にしたくないもんね。

今は仕事でWEB系やってるけど、次の仕事もWEB系とは限らない。
もしかしたらスタンドアロンのWindowsアプリかもしれない。
そうしたら、WEBの技術(といってもたいしたこと無いけど)をどんどん忘れていってしまうのは勿体無い!!

あとFlickrもやってみたいなぁ。
前のサイトはデスクトップ用写真壁紙サイトとして運営してたので、その写真素材たちをどこかにまたアップしておきたい。

また週末にいろいろいじくってみよhappy02

フォトアルバム

2012年5月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

My Photostream

  • Flickrにアップしてる写真の一部です。
    www.flickr.com
    This is a Flickr badge showing public photos and videos from micek_flicek. Make your own badge here.

クリック募金

  • クリックで救える命がある。
Powered by Six Apart