Frage

Das Folgende erhält Objekte aus einer Excel -Tabelle, die übergießen ist string oder übergossen zu double. Das Problem ist, dass selbst wenn ich weiß, dass das Objekt sichtbar eine Ganzzahl ist, die in der Tabelle als "allgemein" formatiert ist. double. Es wäre zwar einfach, das Doppel in das nächste umzuwandeln int, Gibt es eine Möglichkeit, ein Objekt an einen gießen zu lassen int?

    // returns null if the cell is empty
    // returns an object castable to a string if it is a string
    // returns an object castable to a double if it is a floating point or integer number

    internal object GetCell(int row, int column)
    {
        if ((row != 0) && (column != 0) && (worksheet != null))
        {
            string cellName = ExcelCellReference(row, column);
            Microsoft.Office.Interop.Excel.Range oneCellRange;
            oneCellRange = worksheet.get_Range(cellName, cellName);
            object oneObject;

            // contrary to MSDN, the value Empty, checkable with method IsEmpty() 
            // does not work if the cell was empty.
            // instead, what happens is that null is returned.
            oneObject = 
               (object)
oneCellRange.get_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault);

            return oneObject;
        }
        else
        {
            if (worksheet == null)
                throw new Exception("null worksheet reference");
            else
                throw new Exception("invalid argument");
        }
    }

Bearbeiten: Wenn jede Zahl in Excel als schwimmende Punktzahl dargestellt wird, auch wenn sie sichtbar als Ganzzahl ist, würde dies dieses Verhalten erklären. In diesem Fall gibt es keine andere Lösung als Konvertierung.

Bearbeiten: Die Leute veröffentlichen weiterhin Konvertierungsantworten. Diese Frage soll idiomatisch ansprechen Interop Antworten, keine Konvertierungsantworten.

Bearbeiten: Chris 'Antwort in einem Kommentar int i = (int)(double)GetCell(r, c) ist wohl richtig, aber nicht das, was ich vorhatte, weil die Konvertierung außerhalb von vorhanden ist Interop.

War es hilfreich?

Lösung

Entsprechend adrianm,

Es gibt keine Ganzzahl in Excel -Zellen. Die einzigen verfügbaren Typen sind Nummer, Text, logisch und Fehler. Die Zahl wird im Interop zu verdoppeln.

Die Antwort ist also, das Doppel an einen int zu werfen, der alsChris weist darauf hin, dass tatsächlich funktioniert. Beachten Sie, dass Sie, wenn das Doppel nicht gleich einer Ganzzahl ist, eine geeignete Konvertierung entsprechend Ihrem Bedarf durchführen möchten.

Andere Tipps

Warum nicht ToString() Ihr Objekt, dann analysieren int.Parse(...) oder int.TryParse(...) ?

Sie können Ihre konvertieren object hinein double und dann in int, aber du solltest aufpassen als double Wert ist viel größer als int. Also konvertierst du besser deine double hinein long.

Versuche dies:

object val = /*your value*/;
double db = Convert.ToDouble(val);
long x = Convert.ToInt64(db);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top