0

おそらくばかげた質問で、VBAでは手動でマクロを作成しますが、VB.netでそれを行う方法がわかりません。方法があれば、それが素晴らしいことを教えてください!!!

とにかく、私がVB.netでやりたいことは、.TXTファイル全体を手動で選択してExcelワークシートの最初のセルに貼り付けるのと同じです...私ができるファイル処理は、私は知りませんコピー&ペーストの最善の方法。

たとえば、.TXT ファイル全体を読み取り、1 行ずつクリップボードに書き込み、そのクリップボードを Excel ファイルに貼り付けることができると思いますが、それはかなり非効率的だと思います !!!

4

2 に答える 2

0

少し複雑に思えます、スティーブ、私が理解できる以上のことがあるかもしれませんが、うまくいくように見える以下を使用しました...

    myNewTable = myFolder + "League Table S" + mySession + ".xlsx"

    Dim oExcel As Object
    Dim oBook As Object
    Dim oRow As Int16 = 0

    oExcel = CreateObject("Excel.Application")
    oBook = oExcel.Workbooks.Add

    'Read input .txt file line-by-line, Copy to Clipboard & Paste to Excel

    Using rdr As New System.IO.StreamReader(myNewTableTemp)
        Do While rdr.Peek() >= 0
            Dim InputLine As String = rdr.ReadLine
            oRow = oRow + 1
            System.Windows.Forms.Clipboard.SetDataObject(InputLine)
            oBook.Worksheets(1).Range("A" + oRow.ToString).Select()
            oBook.Worksheets(1).Paste()
        Loop
        rdr.Close()
    End Using

    oBook.SaveAs(myNewTable)
    oBook = Nothing
    oExcel.Quit()
    oExcel = Nothing
于 2013-02-25T09:46:11.547 に答える
0

「LEAGUE」という名前のワークシートを 1 つだけ含む空の Excel ファイルを準備できるとします。
このシートでは、最初の行に次の値を定義しました (各セルごとに)。

チーム名 PL WDLFA 差ポイント

これで、次のような疑似コードを書くことができます (いくつかのテストが必要です):

Dim results() = File.ReadAllLines("yourfile.txt")

Dim connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;" + 
                       "Data Source={0};Extended Properties='Excel 12.0;" + 
                       "HDR=YES;IMEX=0'", "yourexcelfile.xlsx")

Using cn = new OleDbConnection(connectionString)
    cn.Open();
    Dim sqlCommand = new OleDbCommand("INSERT INTO [LEAGUE$] " + 
                         "(TEAMNAME,PL,W,D,L,F,A,Dif,Pts)" +
                         "VALUES(?,?,?,?,?,?,?,?,?)", cn)

    sqlCommand.Parameters.AddWithValue("@team", string.Empty)
    sqlCommand.Parameters.AddWithValue("@played", string.Empty)
    sqlCommand.Parameters.AddWithValue("@win", string.Empty)
    sqlCommand.Parameters.AddWithValue("@deu", string.Empty)
    sqlCommand.Parameters.AddWithValue("@los", string.Empty)
    sqlCommand.Parameters.AddWithValue("@f", string.Empty)
    sqlCommand.Parameters.AddWithValue("@a", string.Empty)
    sqlCommand.Parameters.AddWithValue("@dif", string.Empty)
    sqlCommand.Parameters.AddWithValue("@pts", string.Empty)

    For Each line in results
        Dim cells() = line.Split(ControlChars.Tab)
        sqlCommand.Parameters("@team").Value = cells(0)
        sqlCommand.Parameters("@played").Value = cells(1)
        sqlCommand.Parameters("@win").Value = cells(2)
        sqlCommand.Parameters("@deu").Value = cells(3)
        sqlCommand.Parameters("@los").Value = cells(4)
        sqlCommand.Parameters("@f").Value = cells(5)
        sqlCommand.Parameters("@a").Value = cells(6)
        sqlCommand.Parameters("@dif").Value = cells(7)
        sqlCommand.Parameters("@pts").Value = cells(8)
        sqlCommand.ExecuteNonQuery()
    Next
End Using
于 2013-02-23T12:53:44.863 に答える