لا يظهر تنسيق رقم NPOI Excel في ورقة Excel في ASP.NET
سؤال
أحاول إنشاء خلايا تنسيق مزدوجة وأرقام في Excel باستخدام مكتبة NPOI. لقد استخدمت رمز مثل
Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))
في أرقام Excel تتوافق بشكل صحيح ولكن عندما أتحقق من التنسيق ، فإنه يظهر في "عام"
ثم قمت بتغيير الكود الخاص بي إلى ما يلي
Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))
Dim cellStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,#0.0")
cell.CellStyle = cellStyle
ثم أثناء فتح الملف ، فإنه يعطي خطأ ويستغرق وقتًا طويلاً لفتحه. لكن تنسيق Excel يظهر في "الرقم"
خطأ عرض كما هو موضح أدناه.
كيف يمكن اصلاح هذا؟
المحلول
ألق نظرة على هذه, ، هل تقوم بإنشاء كائن خلوي لكل خلية؟ إذا كان الأمر كذلك ، فلا تفعل ذلك. حاول إنشاء اثنين من الأنماط فقط قبل إنشاء خلاياك ثم تطبيق هذه الأنماط المحددة مسبقًا على الخلايا التي تنشئها.
نصائح أخرى
Hare هي طريقة بسيطة لإنشاء تنسيق مزدوج في مستند Excel باستخدام NPOI.
//make NUMERIC Format in Excel Document // Author: Akavrelishvili
var eRow = sheet.CreateRow(rowIndex); //create new Row , rowIndex - it's integer, like : 1,2,3
eRow.CreateCell(0).SetCellValue(row["ProvidName"].ToString()); //create cell and set string value
double Amount = Convert.ToDouble(row["Amount"].ToString()); //convert string to double
eRow.CreateCell(1).SetCellValue(Amount); // create cell and set double value.
هذا هو إصدار العمل ، لقد استخدمته الكثير من المشاريع.
من الصعب للغاية إدراج تنسيق DateTime في Excel ، لا يوجد مثال جيد في الإنترنت وأعتقد أنه يساعد الناس على القيام بذلك بشكل صحيح. أريكم مثال رمز:
//make Date Time Format in Excel Document // Author: Akavrelishvili
var erow = sheet.createrw (rowindex) ؛ // إنشاء صف جديد // ROWINDEX - إنه عدد صحيح ، مثل: 1،2،3
ICellStyle cellDateStyle = workBook.CreateCellStyle(); //create custom style
cellDateStyle.DataFormat = workBook.CreateDataFormat().GetFormat("dd/mm/yyyy"); //set day time Format
eRow.CreateCell(3).SetCellValue(Convert.ToDateTime(row["Date"])); //set DateTime value to cell
eRow.GetCell(6).CellStyle = cellDateStyle; // Restyle cell using "cellDateStyle"
I hope it helps
لإصلاح الكثير من أنماط الخلايا المختلفة ، تعلن جميع الأنماط خارج أي حلقة قد تكون تعمل.
أفترض أنك "J" ستكون العداد ، لذا سأسقط ما كان لديك بتنسيق مصحح لك.
Dim cellStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,#0.0")
For col = 0 To ColoumCounter
For j = 0 To Counter
Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))
cell.CellStyle = cellStyle
Next
Next
يجب أن يعمل هذا بشكل أفضل قليلاً ، عن طريق الحد من عدد الأنماط "الجديدة".
قم بإنشاء نمط بعد ذلك ولكن هذا النمط للعمود
ICellStyle _TextCellStyle = wb1.CreateCellStyle();
_TextCellStyle.DataFormat = wb1.CreateDataFormat().GetFormat("@");
sheet.SetDefaultColumnStyle(2, _TextCellStyle);