0

データの種類(日付、数値など)に関係なく、WebアプリケーションのExcelファイルからのみすべての列をテキスト値として読み取りたい。

使用している接続文字列をご覧ください。ACEドライバーのみがインストールされており、本番サーバーで他のドライバーを使用することはできません。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;
                             Extended Properties="Excel 12.0;HDR=YES;IMEX=1";

設定IMEX=1ができません。一部の値についてはnullを返します。

たくさんの記事を見ることができましたが、正解はわかりませんでした。

どんな助けでもいただければ幸いです。

4

1 に答える 1

3

これがACEが回避した後のあなたの姿だと思います

残念ながら、これらの設定はレジストリで定義されているため、接続文字列からImportMixedTypesまたはTypeGuessRowsを設定することはできません。ACE OleDbドライバーの場合、これらは次の場所に保存されます。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Access Connectivity Engine \ Engines \ Excel

レジストリ内。したがって、接続文字列を単純化して、これらの拡張プロパティの一部を取り除くことができます。

TypeGuessRowsレジストリで0とTextに設定するとImportMixedTypes、期待する動作が得られるはずです。


または、を使用Microsoft.Office.Interop.Excelしてファイルを読み取ることができます。サンプルコード:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelTut
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/C.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;

            int rowCount = xlRange.Rows.Count;
            int colCount = xlRange.Columns.Count;

            for (int i = 1; i <= rowCount; i++)
            {
                for (int j = 1; j <= colCount; j++)
                {
                    MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());
                }
            }

        }

    }
}

相互運用機能を介して読み取りExcelファイルから取得したコード

于 2012-06-26T04:21:17.453 に答える