1

ここでは、ADO.Netを使用して、指定されたconnectionStringを使用してExcelファイルに接続します。これは正常に機能します。唯一の懸念は、シート名に対応するシートからの列名が返されないよりもスペース文字があるかどうかです。私のコード:

        if (extension == ".xls")
        {
            connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source=" + Server.MapPath("~\\ExcelUpload\\Excelsheets\\temp.xls") + ";" +
            @"Extended Properties=" + "\"Excel 8.0;HDR=YES;\"";
        }
        else if (extension == ".xlsx")
        {
            connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
            "Data Source=" + Server.MapPath("~\\ExcelUpload\\Excelsheets\\temp.xlsx") + ";" +
            @"Extended Properties=" + "\"Excel 12.0;HDR=YES;\"";
        }


        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
        DbConnection connection = factory.CreateConnection();
        connection.ConnectionString = connectionString;
        connection.Open();

        DataTable dt;
        String[] restrection = { null, null, sheetName + "$", null };
        dt = connection.GetSchema("Columns", restrection);

では、どうすればスペース文字を含むexcelsheet名をpaasできますか?

4

5 に答える 5

1

たぶん、次のようなものを使用できます。

var dataset = new DataSet();
var connectionString = "connstring";
var connection = new OleDbConnection(connectionString);

connection.Open();

var sheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
if (sheets == null || sheets.Rows.Count < 1) throw new InvalidOperationException("CantReadWorksheets");

foreach (DataRow sheet in sheets.Rows)
{
    var tableName = sheet["Table_Name"].ToString();
    var sql = "SELECT * FROM [" + tableName + "]";

    var adap = new OleDbDataAdapter(sql, connection);
    adap.Fill(dataset, tableName);
}

connection.Close();

シート名を取得する方法を見ることができます。(try..catchブロックが切れた)

于 2013-03-13T11:06:19.370 に答える
1

試す

String[] restrictions = { null, null, "['" + sheetName + "$']", null };

したがって、ワークシート TEST WORKSHEET がある場合、それは 'TEST WORKSHEET$' になりました

なぜそのようなWIERD命名規則に従わなければならないのか、私には理解できません

于 2013-04-18T05:47:05.200 に答える
0

スペースを含むファイル名には問題ありません。ファイルから読み取る前に、ファイルが存在するかどうかを確認してください。

System.IO.File.Exists(Server.MapPath("~\\ExcelUpload\\Excelsheets\\temp filename.xlsx"))
于 2013-03-13T11:03:07.550 に答える
0

コード...

String[] restrection = { null, null, sheetName + "$", null };

...シート名に「$」を追加します。おそらく、シート名を区切る必要があるかもしれません...

String[] restrection = { null, null, "[" + sheetName + "]$", null };

...また...

String[] restrection = { null, null, "\"" + sheetName + "\"$", null };

...?

于 2013-03-13T11:15:10.647 に答える
0

これを置き換えてみてください:

connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source=" + Server.MapPath("~\\ExcelUpload\\Excelsheets\\temp.xls") + ";" +
            @"Extended Properties=" + "\"Excel 8.0;HDR=YES;\"";

これとともに:

string conn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path +
                              ";Extended Properties=\'Excel 8.0; HDR=YES; IMEX=1;\'";

Excel12.0も同様です。私の場合、ケースを解決してください:)

于 2019-02-28T09:38:09.963 に答える