C # Excel.Application - проблема с текстовым полем, преобразованным в научную нотацию - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть следующий код C #, который открывает этот текстовый файл с разделителями табуляции и выполняет сохранение в файл Excel.Проблема, с которой я сталкиваюсь, заключается в том, что некоторые текстовые поля имеют значение, например «9101010521297461515213», преобразуется в «9.10101E + 21».Как предотвратить преобразование в научную нотацию и оставить текст вместо использования функции ниже?

public void SaveTextFileAsExcel(string filefrompath, string filetopath, string newtabname)
{
    // Excel object references.
    Excel.Application m_objExcel = new Excel.Application();
    Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
    Excel._Workbook m_objBook = null;
    Excel.Sheets m_objSheets = null;
    Excel._Worksheet m_objSheet = null;
    // Frequenty-used variable for optional arguments.
    object m_objOpt = System.Reflection.Missing.Value;
    if (filefrompath != "")
    {
        m_objBooks.OpenText(filefrompath, Excel.XlPlatform.xlWindows,1,
                     Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
                     false, true, false, false, false, false,m_objOpt, m_objOpt,
                     m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);


        m_objBook = m_objExcel.ActiveWorkbook;
        m_objSheets = m_objBook.Worksheets;

        m_objSheet = (Excel.Worksheet)m_objSheets.get_Item(1);//Get the reference of second worksheet

        string strWorksheetName = m_objSheet.Name;//Get the name of worksheet.
        if (newtabname != "") 
        { 
            m_objSheet.Name = newtabname; 
        }

        if (filetopath !="")
        {
            // Save the text file in the typical workbook format and quit Excel.
            m_objBook.SaveAs(filetopath, Excel.XlFileFormat.xlWorkbookNormal,
                m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                m_objOpt, m_objOpt, m_objOpt);
        } //if (filetopath !="")
    } //if (filefrompath != "")

    m_objBook.Close(false, m_objOpt, m_objOpt);
    m_objExcel.Quit();
} //SaveAsExcel

1 Ответ

0 голосов
/ 26 февраля 2014

Хотя вопрос старый, это повторяющаяся проблема во всех версиях Excel.

В Excel свойство значения представления называется значением, но вы по-прежнему можете обращаться к исходному значению с помощью FormulaR1C1.

Мне удалось преобразовать одно в другое, заставив свойство Value быть таким же, как FormulaR1C1 (примечание: вы должны установить для столбца текст) с циклом for, подобным следующему:

Sub RevertFormat()
  Dim ymax, xmax, x, y
  ymax = 245
  x = 3
  For y = 2 To ymax
      Sheet1.Cells(y, x).Value = Sheet1.Cells(y, x).FormulaR1C1
  Next
End Sub

Youдолжен иметь возможность доступа к тем же свойствам через C #, хотя это может быть проблематично, это будет работать.К сожалению, я не знаю, как отключить научное форматирование по умолчанию в Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...