Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据从datagirdview导出到保留小数的excel工作表_C#_Excel_Datagridview - Fatal编程技术网

C# 将数据从datagirdview导出到保留小数的excel工作表

C# 将数据从datagirdview导出到保留小数的excel工作表,c#,excel,datagridview,C#,Excel,Datagridview,我正在开发一个C#windows窗体应用程序,它使用Interop Open Library 15.0将数据从DataGridView导出到excel。我在DataGridView中的数据是这样的,它包含的列很少,浮点型数据四舍五入到小数点后三位 例如,我的DataGridView中有一个数字10.000,但当我将其导出到excel时,它只导出10而不是10.000 我使用以下代码导出数据 Microsoft.Office.Interop.Excel._Application app = new

我正在开发一个
C#windows窗体应用程序
,它使用
Interop Open Library 15.0
将数据从
DataGridView
导出到excel。我在DataGridView中的数据是这样的,它包含的列很少,浮点型数据四舍五入到小数点后三位

例如,我的DataGridView中有一个数字10.000,但当我将其导出到excel时,它只导出10而不是10.000

我使用以下代码导出数据

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();


            // creating new WorkBook within Excel application
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);


            // creating new Excelsheet in workbook
            Microsoft.Office.Interop.Excel._Worksheet indexWorkSheet = null;
            indexWorkSheet = workbook.Sheets[1];
            // changing the name of active sheet
            indexWorkSheet.Name = "Index Summary";

            indexWorkSheet.get_Range("A1").Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
            indexWorkSheet.get_Range("A10", "A30").Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
            string filelocation;
            SaveFileDialog SaveFile = new SaveFileDialog();
            if (SaveFile.ShowDialog() == DialogResult.OK)
            {
                filelocation = SaveFile.FileName;



                for (int i = 1; i < dataGridViewIndex.Columns.Count + 1; i++)
                {
                    indexWorkSheet.Cells[9, i + 3] = dataGridViewIndex.Columns[i - 1].HeaderCell.Value;
                }

                for (int i = 1; i < dataGridViewIndex.Rows.Count + 1; i++)
                {
                    indexWorkSheet.Cells[i + 9, 3] = dataGridViewIndex.Rows[i - 1].HeaderCell.Value;

                }

                for (int i = 0; i < dataGridViewIndex.Rows.Count; i++)
                {
                    for (int j = 0; j < dataGridViewIndex.Columns.Count; j++)
                    {

                        indexWorkSheet.Cells[i + 10, j + 4] = dataGridViewIndex.Rows[i].Cells[j].Value.ToString();
                    }
                }
 workbook.SaveAs(filelocation, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
Microsoft.Office.Interop.Excel.\u Application app=new Microsoft.Office.Interop.Excel.Application();
//在Excel应用程序中创建新工作簿
Microsoft.Office.Interop.Excel.\u工作簿=app.Workbooks.Add(Type.Missing);
//在工作簿中创建新的Excel工作表
Microsoft.Office.Interop.Excel.\u工作表索引工作表=null;
indexWorkSheet=workbook.Sheets[1];
//更改活动图纸的名称
indexWorkSheet.Name=“索引摘要”;
indexWorkSheet.get_Range(“A1”).Style.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
indexWorkSheet.get_Range(“A10”、“A30”).Style.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
字符串文件位置;
SaveFileDialog SaveFile=新建SaveFileDialog();
if(SaveFile.ShowDialog()==DialogResult.OK)
{
filelocation=SaveFile.FileName;
对于(int i=1;i
我的DataGridView在下面的屏幕截图中显示

我想用BBL/天和三个小数点的平均价格导出上述数据,无论值是什么

有解决这个问题的好方法吗?
for(int i=0;i               for (int i = 0; i < dataGridViewIndex.Rows.Count; i++)
                    {
                        for (int j = 0; j < dataGridViewIndex.Columns.Count; j++)
                        {
                            int digitcount = 4;
                            indexWorkSheet.Cells[i + 10, j + 4] = dataGridViewIndex.Rows[i].Cells[j].Value.ToString("F"+digitcount);
                        }
                    }   
{ 对于(int j=0;j
尝试此操作以格式化字符串。

10.000
10
。Excel默认使用“常规”格式,不显示任何尾随零。如果要在excel端设置数字格式,则必须显式执行此操作

indexWorkSheet.Cells[i + 10, j + 4] = dataGridViewIndex.Rows[i].Cells[j].Value.ToString();
indexWorkSheet.Cells[i + 10, j + 4].NumberFormat = "#,##0.000";  
// or whatever format is appropriate.
然而,我要做另一个改变:

  • 使用范围而不是单元格。每个小区访问都是一个COM调用,这会给进程增加大量开销。如果你有一个不错的个人资料,我敢打赌你的大部分时间都花在手机访问上
将数据放入数组并在一次调用中设置值(同时设置范围的格式):


这会起作用,但我相信这会导致excel单元格被格式化为“文本”,这可能不是正确的方法。正如d-stanley所说,维护一个列表(集合)以更改数字格式。谢谢,但我只希望将此数字格式用于所提到的两列,因此将该条件添加到示例中。重点是在Excel端而不是C端设置数字格式。您是否尝试过打开XML SDK?如果您愿意,我可以使用OpenXMLSDK提供一个答案来实现这一点。我尝试了XML,但在导出相同格式的数据时遇到了问题。它只是把一切当作文本不考虑它是什么类型。所以,我刚才用了你误解的Interopy。。无论如何,使用OpenXMLSDK生成Exel电子表格是可能的。。读一读:)。。
int[,] data = new int[rows,cols];

... loop
    data[i,j] = value;

var range = indexworksheet.get_Range(...);
range.Value = data;
range.NumberFormat = "#,##0.000";