2016-05-17 4 views
2

В настоящее время я пытаюсь читать в ячейках с листа расширенных расширений и, кажется, переформатирует ячейки, когда я этого не хочу. Я хочу, чтобы это получилось как текст плана. Я прочитал пару решений этой проблемы, и я их реализовал, но у меня все еще такая же проблема.Чтение столбцов из Excel, переформатирование ячеек

Читатель превращает даты в числа и числа в даты.

Пример:

Пятница, 29 Январь 2016 выходит быть: 42398

и

40,00 выходит быть: 2/9/1900 12:00:00 AM

код:

string stringconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + files[0] + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; 
try { 
    OleDbConnection conn = new OleDbConnection(stringconn); 
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [CUAnswers$]", conn); 
    DataTable dt = new DataTable(); 
    try { 
     printdt(dt); 

Я попытался

IMEX=0; 
HDR=NO; 
TypeGuessRows=1; 

Это как я распечатав лист

public void printdt(DataTable dt) { 
     int counter1 = 0; 
     int counter2 = 0; 
     string temp = ""; 
     foreach (DataRow dataRow in dt.Rows) { 
      foreach (var item in dataRow.ItemArray) { 
       temp += " ["+counter1+"]["+counter2+"]"+ item +", "; 
       counter2++; 
      } 
      counter1++; 
      logger.Debug(temp); 
      temp = ""; 
      counter2 = 0; 
     } 
    } 

ответ

1

у меня была аналогичная проблема, за исключением того, что использует Interop читать электронную таблицу Excel. Это работает для меня:

var value = (range.Cells[rowCnt, columnCnt] as Range).Value2; 
string str = value as string; 
DateTime dt; 
if (DateTime.TryParse((value ?? "").ToString(), out dt)) 
{ 
    // Use the cell value as a datetime 
} 

Editted добавить новые идеи

Я собирался предложить сохранение таблицы как значений, разделенных запятыми. Затем Excel преобразует ячейки в текст. Легко разобрать CSV в C#.

Это привело меня к мысли, как программно выполнять преобразование, которое покрыто Convert xls to csv programmatically. Возможно, код в принятом ответе:

string ExcelFilename = "c:\\ExcelFile.xls"; 
DataTable worksheets; 
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + ExcelFilename + ";" + @"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""; 
using (OleDbConnection connection = new OleDbConnection(connectionString)) 
{ 
    connection.Open(); 
    worksheets = connection.GetSchema("Tables"); 
    foreach (DataRow row in worksheets.Rows) 
    { 
     // For Sheets: 0=Table_Catalog,1=Table_Schema,2=Table_Name,3=Table_Type 
     // For Columns: 0=Table_Name, 1=Column_Name, 2=Ordinal_Position 
     string SheetName = (string)row[2]; 
     OleDbCommand command = new OleDbCommand(@"SELECT * FROM [" + SheetName + "]", connection); 
     OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); 
     oleAdapter.SelectCommand = command; 
     DataTable dt = new DataTable(); 
     oleAdapter.FillSchema(dt, SchemaType.Source); 
     oleAdapter.Fill(dt); 
     for (int r = 0; r < dt.Rows.Count; r++) 
     { 
      string type1 = dr[1].GetType().ToString(); 
      string type2 = dr[2].GetType().ToString(); 
      string type3 = dr[3].GetType().ToString(); 
      string type4 = dr[4].GetType().ToString(); 
      string type5 = dr[5].GetType().ToString(); 
      string type6 = dr[6].GetType().ToString(); 
      string type7 = dr[7].GetType().ToString(); 
     } 
    } 
} 
+0

Это не поможет. Я не хочу его повторно преобразовывать. Я хочу, чтобы он вышел из ячейки в правильном формате. или как текст плана. –

+0

Мне кажется, если вы хотите прочитать ячейку как строку, тогда ее нужно ввести как строку, а не как дату и время (или что-то еще). Возможно, вам придется изменить таблицу и преобразовать эти ячейки в текст, возможно, префиксное значение с помощью одной кавычки. (Это, вероятно, не тот ответ, который вы хотели.) –

+0

@Sari Пожалуйста, ознакомьтесь с новыми идеями в моем редактировании. –