[リストへもどる]
一括表示

投稿時間:2003/01/22(Wed) 16:45
投稿者名:ゆき
Eメール:me@ulcoat.co.jp
URL :
タイトル:
質問!エクセルデータをMSFlexGrid上に
こんにちは。
No.2239の質問に便乗させて頂きます。
自分も同じ事をしたくて、同じようにやったのですが、データが歯抜けになってしましました。
Excelのシート数は4枚でそれぞれ空白になってしまうところは別の場所です。
また、シート内では、抜けるところは何回やっても変わりません。
原因が分からず行き詰まっております。
環境
WindowsNT4.0 SP5
VB6.0 SP5
Excel2000
よろしく御願いします。

投稿時間:2003/01/22(Wed) 18:38
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: エクセルデータをMSFlexGrid上に
セルが空白になっていませんか?(多分通常の空白なら問題ないようでが半角の
空白が混じってる場合?が表示する場合があります。)

飛んでいる所は式が入力されている等何か共通する事がありませんか?

一度 4列の10行位のファイルで全部のセルにデータを入力
したもので試して見て下さい。
各列には同じタイプのデータを入れて下さい。

投稿時間:2003/01/23(Thu) 10:02
投稿者名:ゆき
Eメール:me@ulcoat.co.jp
URL :
タイトル:
Re^2: エクセルデータをMSFlexGrid上に
早速のレスありがとうございます。
帳票を取り込んでいるので、横方向は項目等で同じ文字列が入っているのですが、
とびとびで空白になってしまいます。

> 飛んでいる所は式が入力されている等何か共通する事がありませんか?
特にないと思います。
計算式は使っていませんが、VBAでThis_WookbookでWooksheets_Changeに値が入力されたときに、
上限下限で異常値を赤くするマクロを組んであります。

また、不安点は、EXCEL2000を使っていますが、
    Set DB = OpenDatabase(FileName, False, False, "Excel 8.0;HDR=YES;")
としているところです。
ただ単に、 Excel 9.0  としても、構文エラーが起こったので、このままにしてあります。

投稿時間:2003/01/23(Thu) 10:31
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: エクセルデータをMSFlexGrid上に
> 特にないと思います。
> 計算式は使っていませんが、VBAでThis_WookbookでWooksheets_Changeに値が入力されたときに、
> 上限下限で異常値を赤くするマクロを組んであります。

一度そのファイルをExcelからCSV形式で保存し、その保存したCSV形式のファイルをExcelで
表示して見て下さい。
その表示された状態と読み込んだ状態が多分同じになるかと思います。


> また、不安点は、EXCEL2000を使っていますが、
>     Set DB = OpenDatabase(FileName, False, False, "Excel 8.0;HDR=YES;")
> としているところです。

私も詳しくは知りませんが(只今DB勉強中) Excel2000 でもExcel2002 でも
その部分は Excel 8.0 です。 
DAO *.* との接続(ISAM ドライバ)が Excel 8.0 形式をサポートしているという事で
Excelがインストールされていなくても使用可能と理解しています。
従って今お使いのExcelのバージョンとは特に関係がないかと思います。
(詳しい方、フォロー願います)

投稿時間:2003/01/23(Thu) 11:53
投稿者名:ゆき
Eメール:me@ulcoat.co.jp
URL :
タイトル:
Re^4: エクセルデータをMSFlexGrid上に
> 一度そのファイルをExcelからCSV形式で保存し、その保存したCSV形式のファイルをExcelで
> 表示して見て下さい。
> その表示された状態と読み込んだ状態が多分同じになるかと思います。

今のBookではSheet4枚使っていますが、CSVで保存し、1枚目のSheetを読み出したところ、空の部分は有りませんでした。

投稿時間:2003/01/23(Thu) 13:31
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: エクセルデータをMSFlexGrid上に
> 今のBookではSheet4枚使っていますが、CSVで保存し、1枚目のSheetを読み出したところ、空の部分>は有りませんでした。

でしたら、そのファイルを Xls 形式で保存して DAO で読んだ場合はどうなりますか?
又、Excelで直接入力したファイルを作って試して見て下さい。

うまく読み込めないのはデータになにか問題があるかと思うのですが
読み込めないデータの行に何か共通するものはありませんか?
列に書式設定等してありますか?(Excel & MSFlexGrid)
  

投稿時間:2003/01/23(Thu) 14:41
投稿者名:ゆき
Eメール:
URL :
タイトル:
Re^6: エクセルデータをMSFlexGrid上に
> > 今のBookではSheet4枚使っていますが、CSVで保存し、1枚目のSheetを読み出したところ、空の部分>は有りませんでした。

確認不足で、上記は確認できていませんでした。

空白部分の共通点が分かりました。
各列ごとに、テキストか数値どちらかしか出ません。

各列の一番上のセルには
"1FAI001"
といったような記号しか入っていません。

投稿時間:2003/01/23(Thu) 15:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: エクセルデータを・・・
> 空白部分の共通点が分かりました。
> 各列ごとに、テキストか数値どちらかしか出ません。

データベースとして扱いますので各列内は同じ種類(文字列か整数か等)のデータに統一
する必要があります。
これはCSV形式等も同じですし、MSFlexGrid に表示する場合でも同じです。
同じ列内で数字だけのセルや文字だけのせるが混じる場合はその列は文字列に書式をする
必要が場合によっては必要になります。
Excel上で事前に全セルの書式を文字列にしておいて方が無難かと思います。


> 各列の一番上のセルには
> "1FAI001"
> といったような記号しか入っていません。

一番上の行は項目として読み込まれます
サンプルにも書いていましたが (HDR=NO で項目を読込まない)
HDR=YES では違ってきます。(省略時は YES になります)
その辺はご自分で試して下さい。
又、色々なExcelファイルを読み込んでどうなるか、ご自分で確認して下さい。
一般的なマトリックス状のデータなら問題ないはずです。

投稿時間:2003/01/23(Thu) 15:49
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: エクセルデータを・・・
ちょっと試して見ましたが書式変更してもだめですね
ドライバがその列内のデータを調べ多い方の型に設定してしまうようです。
型が合わない場合そのデータは失われるようです。

そのような混在するデータの場合は他の方法で読み込むしかないようですね

投稿時間:2003/01/23(Thu) 16:14
投稿者名:ゆき
Eメール:
URL :
タイトル:
Re^8: エクセルデータを・・・
> ちょっと試して見ましたが書式変更してもだめですね
私も試して見ましたが、やはりだめでした。

> そのような混在するデータの場合は他の方法で読み込むしかないようですね
仕方が無いので、
   Grid1.TextMatrix(x,y) = xlSheet.Range(x,y)
でやってみようと思います。

いろいろと有難うございます。

投稿時間:2003/01/23(Thu) 18:54
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^8: エクセルデータを・・・
> そのような混在するデータの場合は他の方法で読み込むしかないようですね

と書きましたが、Schema.ini と呼ばれるファイルを使用すればできるようです。
その方法は、今調査中です。ご存知の方よろしくお願いします。

投稿時間:2003/01/23(Thu) 16:08
投稿者名:A221
Eメール:
URL :
タイトル:
Re: 質問!エクセルデータをMSFlexGrid上に
もともとはエクセルのシートを読んできてそのとおりに再現したいという
要望で作成したもので、何も考えずにべたっとはっています。

'------------------------------------------------------
'必要コントロール Text1 Msflexgrid1 Command1
'------------------------------------------------------
Option Explicit
'エクセルのシートを読む。色付きセル再生。

Private xlApp    As New Excel.Application
Private xlbook   As New Excel.Workbook
Private xlsheet  As New Excel.Worksheet

Private RowRange As Long
Private Colrange As Long

Private fpath    As String
Private tmpname  As String

Private Sub Command1_Click()
'TEXTに入力された名前で読み込み
Dim xlRow As Long
Dim xlCol As Long

fpath = App.Path        'アプリケーションと同じパスなら。任意なら"C:\〜"
tmpname = Text1.Text    'コモンダイアログで拾うほうがいいかも

'事前バインド
Set xlApp = CreateObject("Excel.Application")
Set xlbook = xlApp.Workbooks.Open(fpath & tmpname)
'Set xlbook = xlApp.Workbooks.Open("C:\test.xls")
'シートの番号
Set xlsheet = xlbook.Worksheets(1)

'MSFLEXGRIDは(0,0)から始まるがEXCELは(1,1)から始まる
RowRange = xlsheet.UsedRange.Rows.Count - 1
Colrange = xlsheet.UsedRange.Columns.Count - 1

On Error Resume Next
'高速化処理・描画対象を消しとく
With MSFlexGrid1
    .Visible = False

    .Rows = RowRange + 1
    .Cols = Colrange + 1

    For xlRow = 1 To RowRange + 1
        For xlCol = 1 To Colrange + 1
            .TextMatrix(xlRow - 1, xlCol - 1) = xlsheet.Cells(xlRow, xlCol).Value
'色替えがなければ、これで可能。
'            .Row = xlRow
'            .Col = xlCol
'            .CellBackColor = xlsheet.Cells(xlRow, xlCol).Interior.Color
        Next xlCol
    Next xlRow

    .Visible = True
End With

End Sub

Private Sub Form_Terminate()
'フォームが閉じる時、開放
Set xlsheet = Nothing
Set xlbook = Nothing
Set xlApp = Nothing
End Sub

投稿時間:2003/01/24(Fri) 10:31
投稿者名:ゆき
Eメール:me@ulcoat.co.jp
URL :
タイトル:
<<解決>>質問!エクセルデータをMSFlexGrid上に
A221さんのプログラムを使わせて頂きました。
実は、フォントの色もExcelに合わせて変更したかったので、ちょうど良かったです。

Schema.iniは全く理解できそうにないのでとりあえずやめておきました。
ただ、TextMatrixだと処理スピードがかなり掛かってしまいそうですね。
特にフォントの色の変更を入れたら格段に遅くなってしまいました。

皆さん色々と調べて頂きありがとうございました。

まだまだ、ソフトは完成してないので、これからも質問させて頂くと思いますが、よろしく御願い致します。

投稿時間:2003/01/24(Fri) 01:23
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 質問!エクセルデータをMSFlexGrid上に
この問題を Schema.ini を参照させる事で解決できないでしょうか?
Schema.ini ファイルを作って試して見たのですが Excelファイルには適用しないのでしょうか
Schema.ini ファイルは下記の用に作って設定もいろいろ試して見たのですが私の指定の仕方が
悪いのか又は元々不可能なのかできませんでした。
ご存知の方おられましたらご指導のほどお願いします。

[test.xls]
ColNameHeader=True
Format=TabDelimited
MaxScanRows=12
CharacterSet=OEM
Col1=No Text Width 50
Col2=氏名 Text Width 50
Col3=支店 Text Width 50

投稿時間:2003/01/24(Fri) 10:32
投稿者名:dai
Eメール:dee_bassist@hotmail.com
URL :http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q194124
タイトル:
Re^2: 質問!エクセルデータをMSFlexGrid上に


デフォルトでは、先頭8行でテキスト型/数値型等の判断が行われるので、
レジストリ
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]

のTypeGuessRowsを充分大きくすること(もしくは0にする)で解決できるかもしれません。

投稿時間:2003/01/24(Fri) 11:35
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 質問!エクセルデータをMSFlexGrid上に
> のTypeGuessRowsを充分大きくすること(もしくは0にする)で解決できるかもしれません。

早速のレスありがとうございます。

0 では変化がありませんが 1にして1行目に文字を入れるとその列は文字列になりました。
ただ、今度は逆にその中に半角の数字だけのデータがあるとはぶかれるようです。
文字列にしておけば、数字も文字列として表示できると思ったのが間違いだったようです。
Excelの関数を使って事前にその列のデータを全角にしておけば一応表示できるのでそれで
良しとしておきます。

投稿時間:2003/01/24(Fri) 12:49
投稿者名:dai
Eメール:dee_bassist@hotmail.com
URL :http://support.microsoft.com/default.aspx?scid
タイトル:
Re^4: 質問!エクセルデータをMSFlexGrid上に
IMEX=1 が必要でした。

http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q194124

      Dim Db As Database
      Dim Rs As Recordset

      Private Sub Command1_Click()
          Set Rs = Db.OpenRecordset("Sheet1$")
          Do While Not Rs.EOF
              Debug.Print Rs(0)
              Rs.MoveNext
          Loop

      End Sub

      Private Sub Form_Load()
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
               False, True, "Excel 8.0; HDR=NO;IMEX=1") '上記URLのココを修正
      End Sub

      Private Sub Form_Unload(Cancel As Integer)
          Db.Close
          Set Db = Nothing
      End Sub

投稿時間:2003/01/24(Fri) 13:46
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: 質問!エクセルデータをMSFlexGrid上に
> IMEX=1 が必要でした。

ありがとうございました。
こんな方法があったのですね!
昨夜、遅くまで検索していたのですが、そのような情報はどこにもなかったですね
おかげさまで使用範囲が拡大しました。
これを機会にDBについても少し勉強したいとおもいます。