0

読んでくれてありがとう、私の疑問は次のとおりです.xlsファイルからデータを取得しようとしていますが、ファイルをアップロードせずにローカルで行う必要があります.txtファイルと同様のことを行い、完全に動作します:

Function Send(ByVal file As HttpPostedFileBase) As ActionResult
    Dim line As String
    Dim textreader As System.IO.StreamReader = New StreamReader(file.InputStream)
    While Not textreader.EndOfStream
        line = textreader.ReadLine()
        ViewBag.line = line
    End While
    Return View("Index")
End Function

しかし、まず、ストリームリーダーを使用できないため、Excelファイルに対して同じことを行うことはできません。したがって、このコードを使用する場合、xlsファイルのディレクトリを指定する方法がわかりません

    Dim oApp As Excel.Application = New Excel.Application
    Dim oWB As Excel.Workbook
    Dim oSheet As Excel.Worksheet
    oWB = oApp.Workbooks.Open(file.inputstream)  <-- HERE IS WHERE I GET (AN OBVIOUS) ERROR

ファイルをローカルで開く方法を知っている人はいますか? 読んでくれてありがとう :)

4

1 に答える 1

0

それを行う方法はいくつかありますが、そのうちの1つは「データベーススタイル」のファイルにアクセスすることです...

...
    string filePath = string.Format("C:\\TEST\\{0}.xlsx", Guid.NewGuid().ToString());
    var fileStream = File.Create(filePath);
    input.CopyTo(file.InputStream);
    fileStream.Close();

    string cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath  + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";
    string query = "SELECT * FROM SHEET_NAME";

    conn= new OleDbConnection(cn);
    conn.Open();
    OleDbCommand woOleCommand = new OleDbCommand(query, conn);

    DbDataReader result = woOleCommand.ExecuteReader();

    // Read the DataReader...
...

したがって、基本的にはテーブルのようにシートをクエリします。それらが実際にテーブルである場合、このコードが探しているものかもしれません。

一方、まだ自動化を使用する必要がある場合は、代わりに次のようなことを試してください。

...    
object missing = System.Reflection.Missing.Value;
wBook = (Excel._Workbook)xl.Workbooks.Open(filePath, false, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); 
...

InputStream の読み取り

using (var fileStream = File.Create(filePath)) {
     file.InputStream.CopyTo(fileStream); 
} 
// Now you got your stream on a file (filePath) so you can work with it.
于 2012-07-19T20:06:09.583 に答える